2

在连接到公共路由服务器bgp-view.tvnetwork.hu并发出命令时,我观察到 netcat 和 telnet 之间的不同行为show ip bgp

使用 Telnet 输出(通常有几万行长)被截断,为了查看它,您必须按空格或输入继续(如手册页)。当我与 netcat 连接时,它开始转储所有输出,并在前几百行之后挂起。即使我明确声明我想在使用命令terminal length 100netcat 的前 100 行之后暂停,也不会改变行为。

您知道为什么会发生这种情况以及如何解决吗?我的操作系统是 ubuntu 10.4,路由服务器运行 Quagga(版本 0.99.5)。使用其他类型的路由器(cisco 或 juniper)不会出现该问题。

谢谢你。

附言。我想将问题标记为路由服务器,但我无法创建新标签:(

编辑:

问题是 netcat 不协商窗口大小(请参阅下面的答案)。Netcat 的-t参数用于协商 telnet 选项,但它以否定(DON'T 或 WON'T)回复,所以问题是如何让 netcat 协商 telnet 选项。也许我会为这个问题发布一个新问题。

4

2 回答 2

1

我在瞻博网络路由器上发现了与 SSH 1.5 类似的差异。当我实现一个网络拓扑工具时,我不得不在 Java 中使用两个不同的 SSH 库来让事情正常工作。我从来没有完全诊断出这个问题,但看起来我的一个库的握手方式存在问题,而不是路由器上的 ssh 服务器期望的事情如何完成。对于这种情况,我的连接刚刚被删除。我不得不使用四个库来支持三种协议:telnet、ssh 1.5 和 ssh 2.0。

如果这是路由器特定的问题,我一点也不感到惊讶。不幸的是,除了尝试不同的库或程序来实现您的目标之外,我没有任何有用的建议给您。如果您想对实际问题进行故障排除,您可以观察数据包的通过。

谢谢,

-布莱恩-

于 2010-08-16T14:54:34.843 回答
1

好的,wireshark 解开了谜团。

问题是 telnet 选项的协商。服务器从 telnet 客户端请求“Do Negotiate About Window Size”,但客户端没有进行协商,即使使用 -t 选项 netcat 也会回复“Won't Negotiate About Window Size”

WindowSizeOptionHandler()我使用 apache commons 库创建了一个 java telnet 客户端,以使用构造函数协商窗口大小,它工作正常。现在我只需要找到如何使用 netcat 来完成它。

于 2010-08-21T13:09:56.740 回答