我观察到,在连接到公共路由服务器时,netcat 和 telnet 的行为有所不同bgp-view.tvnetwork.hu并发出命令show ip bgp
。
使用 Telnet 时,输出(通常有几万行)会被截断,为了查看所有内容,您必须按空格键或 Enter 键才能继续(就像手册页一样)。当我使用 netcat 连接时,它只是开始转储所有输出,并且在前几百行之后它就挂起了。即使我明确说明我想使用命令terminal length 100
netcat 在前 100 行之后暂停,也不会改变行为。
你知道为什么会发生这种情况以及如何解决吗?我的操作系统是 ubuntu 10.4,路由服务器运行 Quagga(版本 0.99.5)。另一个 quagga 路由服务器 () 也观察到了同样的行为。使用其他类型的路由器(cisco 或 juniper),不会出现该问题。
谢谢。
附言:我也将这个问题发布到了 stackoverflow,但服务器故障似乎更为相关。
编辑:
Wireshark 帮助我发现问题在于,尽管服务器请求“协商窗口大小”,但 netcat 拒绝协商窗口大小选项。Netcat 有一个 -t 参数来协商 telnet 选项,但它的行为是不接受任何选项(默认使用 DON'T 或 WON'T)。所以现在的问题是如何让 netcat 协商窗口大小并发送宽度 80 和高度 25,这是 telnet 发送的值。
答案1
如果您通过 telnet 连接并通过给出命令启动term len 0
,它似乎不使用分页。
据猜测,使用 netcat 时它不进行任何分页的原因是它可能没有针对基本终端特性进行预期的 TELNET 协议协商。
编辑:似乎主要问题是显示完整路由表需要的时间太长了。离开 telnet 会话后,运行term len 0
并sh ip bgp
显示结果如下:
Vty connection is timed out.
Connection closed by foreign host.
可能向路由服务器发送定期数据(可能每 45 秒发送一个空格字符)就足以不触发 VTY 超时,但我需要检查源代码以确保。