好的,我已经能够组装以下杰作:
naws_command = struct.pack('!BBBHHBB', 255, 250, 31, # IAC SB NAWS width, height, 255, 240) # IAC SE t.get_socket().send(naws_command)
现在说几句话。
首先, telnetlib 不支持直接发送命令;它只是逃避了它们。因此,要发送命令,我们必须直接使用底层套接字。我们这样做是使用 get_socket() 的方法 Telnet 对象实例( t 这里)。
telnetlib
get_socket()
Telnet
t
该 NAWS 这里组装的命令由 RFC 1073 。该 width 和 height 变量是常规的Python整数,它们被打包成两个16位无符号整数。
NAWS
width
height
请注意,这不是一个完美的解决方案,我不确定它是否真的适合您。最重要的是,在能力谈判期间, telnetlib 将通知服务器它 WON'T NAWS ,因此特定服务器实际上可能会忽略这些命令。
WON'T NAWS
如果是这种情况,你可能不得不使用 set_option_negotiation_callback() 。可悲的是,这意味着你必须处理通常的所有选项 telnetlib 为你做。而AFAIK它没有任何便利。