zoukankan      html  css  js  c++  java
  • 关于Apache.commons.net中的telnet协议调用中输入cmd命令的长度的问题

         之前做了一个项目,用到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并执行,然后反复循环上述操作。

           代码简单就不贴了

  • 相关阅读:
    【转载】Nginx负载均衡之后碰到的问题
    【转载】Nginx
    【转载】大型网站架构系列之一,前言,不得不考虑的问题
    【转载】Windows上搭个Nginx集群环境玩玩
    [转载]反射
    【转载】Nginx 简介
    【转载】系统性能调优吐血总结分享
    【转载】nginx for windows: 让nginx以服务的方式运行
    poj2377
    poj2371
  • 原文地址:https://www.cnblogs.com/gongshaobo93/p/5166948.html
Copyright © 2011-2022 走看看