博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Apache.commons.net中的telnet协议调用中输入cmd命令的长度的问题
阅读量:5877 次
发布时间:2019-06-19

本文共 1111 字,大约阅读时间需要 3 分钟。

     之前做了一个项目,用到Apache封装的一个调用Windows系统telnet服务的jar包,开始在远程执行cmd命令的时候由于命令所带的参数比较短,没有出现什么问题,昨天在调用时突然就无法执行了,后来找各种原因,一一排除后猜测是执行的cmd命令参数长度太长,命令行无法执行

     后来把远程调用的telnet输出流中的数据全读出来,一一对比后发现在第1024个字符处出现了一个乱码,是一个像“口”的乱码,这时就猜测是命令长度不得超过1k,也就是1024个字符。

     后来查了下命令行的命令长度限制,资料如下

标题: 命令行的长度限制是多少?作者: Demon链接: http://demon.tw/programming/what-is-the-command-line-length-limit.html版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。命令行的长度限制是多少?这取决于你问的是谁。CreateProcess函数的最长命令行长度为32767字符。这个限制来自于UNICODE_STRING结构。CreateProcess是创建进程的核心函数,所以如果你直接调用该函数,该限制是你唯一需要注意的地方。但是如果你通过其他方式间接调用CreateProcess,那么可能会有其他限制。如果你使用的是CMD.EXE命令处理器,那么你同样受到CMD.EXE的长度限制,即8192的命令行长度限制。如果你正在使用ShellExecute/Ex函数,那么你会受到ShellExecute/Ex函数的长度限制,即不得超过INTERNET_MAX_URL_LENGTH的命令行长度(大约2048字符)(如果你的操作系统为Windows 95,那么该限制为MAX_PATH)谈到这儿,我还要提到另外一种限制:你所处环境的最大长度为32767字符。环境的最大值包括所有的变量名加上所有的值。

      但是这里明显不是上述的那些情况,这里是1024个字符。不知道是不是Apache封装的时候设定的参数大小为1Kb

      最后我的解决方法是:

      先将完整的Command命令写入telnet并执行,这时输出流中会出现刚才输入的一长串命令,末尾是”more ?“ 其中在第1024个字符处是乱码,这里可以将流中的数据一一读出,只要读到‘?’就返回标记,将之前的Command去掉前1023个字符,将剩下的一串作为新的Command命令写入telnet并执行,然后反复循环上述操作。

       代码简单就不贴了

 

转载于:https://www.cnblogs.com/gongshaobo93/p/5166948.html

你可能感兴趣的文章
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
遇到的那些坑
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>