当Java程序创建telnet进程时,我无法使用telnet 登录HPUX主机。
当我从命令行(来自bash)telnet到HPUX主机时,我能够登录并使用该会话。
当我从Java生成telnet进程时,会发生一些奇怪的事情。我被提示输入用户名并提交。我也得到了密码的提示。但由于某种原因,telnet服务器不等待密码;它会在发送之前退出会话。
查看wireshark中的交换,我看到一旦telnet客户端发送了密码提示的ACK,服务器就会发送一个FIN数据包,终止初始化会话。
在导致密码提示的握手中我可以看到的一个差异是服务器要求终端速度。从命令行运行telnet时,它发送的终端速度为38400,38400。从Java运行telnet时,终端速度为0,0。
查看telnet客户端的源代码,我发现telnet客户端发送的“终端速度”的一个来源是cfgetospeed()/ cfgetispeed()API的输出。根据{{3}},0波特率的含义是“挂断”,这就是HPUX telnetd进程正在解释它的方式。
我正在使用Linux Fedora Core 6。
答案 0 :(得分:1)
我怀疑$ TERM环境变量是间接用于确定速度的,并且在从Java生成它时不会设置。
如果不是这样,你也可以尝试通过bash启动telnet,即从Java启动bash并发送telnet命令行。这应该提供与手动启动时完全相同的环境。