我在连接到公共路由服务器 bgp-view.tvnetwork.hu 并发出命令show ip bgp
时发现了netcat和telnet之间的不同行为。
使用Telnet输出(通常是几万行长)被截断,为了查看它,你必须按空格或继续输入(如手册页)。当我用netcat连接时,它只是开始转储所有输出,并在它挂起的前几百行之后。即使我明确声明我想在使用命令terminal length 100
的前100行之后暂停,netcat也不会改变行为。
您是否知道为何会出现这种情况以及如何解决这个问题? 我的操作系统是ubuntu 10.4,路由服务器运行Quagga(版本0.99.5)。使用其他类型的路由器(cisco或juniper)时,问题不会出现。
谢谢。
PS。我想将问题标记为路由服务器,但我无法创建新标记:(
修改
问题是netcat没有协商窗口大小(请参阅我的回答)。 Netcat的-t
参数用于协商telnet选项,但它会回复否定(DO NOT或WILL NOT),所以问题是如何让netcat协商telnet选项。也许我会就此问题发布一个新问题。
答案 0 :(得分:1)
我在juniper路由器上发现了与SSH 1.5类似的差异。当我实现网络拓扑工具时,我不得不在Java中使用两个不同的SSH库来使事情发挥作用。我从来没有完全诊断出这个问题,但看起来我的一个库是如何握手的问题,而不是路由器上的ssh服务器如何期待完成任务。对于这种情况,我的连接只是被删除。我不得不使用四个库来支持三种协议:telnet,ssh 1.5和ssh 2.0。
如果这是特定于路由器的问题,我不会感到惊讶。不幸的是,除了尝试使用不同的库或程序来实现您的目标之外,我没有任何有用的建议。如果您想对实际问题进行故障排除,可以观察数据包的运行情况。
谢谢,
-Brian -
答案 1 :(得分:1)
好的,神秘的电影解决了。
问题在于telnet选项的协商。 服务器请求来自telnet客户端“协商关于窗口大小”,但客户端没有协商,甚至使用-t选项netcat回复“不会谈判窗口大小”< / em>的。
我使用apache commons库创建了一个java telnet客户端,使用WindowSizeOptionHandler()
构造函数协商窗口大小,它工作正常。现在我只需要找到如何使用netcat。