0

底线

  • 该脚本不会打印从 socket.recv() 到 linux 终端的所有内容。
  • 如果我在解释器中做同样的事情,它会将所有数据打印到终端。

(假设我使用本地网关作为 ip 和 23 作为端口,所以远程登录到我的路由器)

import socket
q = socket.socket()
q.connect(ip, port)
data = q.recv(1024)
print data

解释器的输出是四行:

(一些 alt 代码乱码或第一行的任何内容)
RT v24-sp2 std (c) 2012 NewMedia-NET GmbH
发布:03/21/12(SVN 修订:18795)
DD-WRT 登录:

脚本的输出:

(只是第一行的替代代码乱码)

任何关于为什么会发生这种情况以及如何纠正它的建议将不胜感激。

谢谢,

安德鲁

4

1 回答 1

1

当一次缓慢地运行命令时,您的路由器有时间在您有机会调用之前发送它计划发送的所有内容q.recv(1024)

当您从脚本运行它时,命令会快速连续执行。当脚本执行q.recv(1024)时,路由器只发送了一些数据,而不是全部。

由于您不使用循环返回并尝试读取更多数据,这就是结束,您将不再接收(或打印)任何数据。

(顺便说一句,“alt-code 乱码”到底是什么?你应该在这里得到一些二进制数据,它是 telnet 协议协商的一部分。)

于 2013-01-30T02:26:05.780 回答