【问题标题】:Different behaviour of netcat from telnet when connecting to public route server连接到公共路由服务器时,netcat 与 telnet 的不同行为
【发布时间】:2010-08-16 14:44:39
【问题描述】:

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

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

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

谢谢。

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

编辑:

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

【问题讨论】:

    标签: telnet netcat


    【解决方案1】:

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

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

    谢谢,

    -布莱恩-

    【讨论】:

    • 感谢您的回复。看来这确实是一个特定于路由器的问题,因为另一个公共 quagga 路由服务器 (route-server.tenet.ac.za) 也显示出相同的行为。我将安装wireshark 来查看数据包,希望它可以提供一些见解。
    【解决方案2】:

    好的,wireshark 解开了谜团。

    问题在于 telnet 选项的协商。 服务器从 telnet 客户端请求“协商窗口大小”,但客户端没有协商,即使使用 -t 选项 netcat 也会回复 “不会协商窗口大小”。

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

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 2012-05-30
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2017-09-26
      • 2010-10-21
      相关资源
      最近更新 更多