+ -
当前位置:首页 → 问答吧 → telnet的2个问题

telnet的2个问题

时间:2010-08-09

来源:互联网

本帖最后由 pengjm 于 2010-08-12 08:21 编辑
  1. import telnetlib
  2. import getpass
  3. import sys
  4. CODEC = 'UTF-8'
  5. HOST = "10.41.24.137"
  6. user = "cspftp"
  7. password = "cspftp"
  8. spacetime = 1

  9. tn = telnetlib.Telnet(HOST,"23")
  10. print tn.read_until("login:")
  11. tn.write(user+"\n")
  12. print tn.read_until("Password:")

  13. tn.write(password+"\n")

  14. while True:
  15.     ret =tn.read_some()
  16.     print ret
  17.     if ret.find(">")>-1:
  18.         break
  19.     if ret.find("Terminal type?")>-1:        #介于我这边都需要输入vt00所以为了良好的移植性我这边加了判断,若是不需要输入直接跳过输入vt100
  20.         tn.write("vt100\n")
  21.         print tn.read_until(">")
  22.         break


  23. #strcmd = strcmd.encode(CODEC)
  24. tn.write("ls 我\n")
  25. print tn.read_until(">")
  26. tn.write("exit\n")
  27. print tn.read_all()
复制代码
小弟 有2个不明白之处,
1是我用telnetlib连接suse服务器时,总有
tset: unknown terminal type network
Terminal type?
如果输入vt100就可以进入该用户结果如下:
vt100
csh: using dumb terminal settings.
linux /home/cspftp>
网上找过相关资料说是SHELL的问题,我这边试用多个服务器都是一样。
2,就是连接上服务器后我要是发送一个带汉字的命令:
如tn.write("ls 我\n")
有的服务器可以正确读到tn.read_until(">")命令结果,然而有些机器就会到tn.read_until(">")这边死在那,不知道为啥
注:自己比较成功和失败的服务器,貌似是英文版的服务器能读到命令结果,而中文版的都死那,不知何原因,盼高手解决疑虑

作者: pengjm   发布时间: 2010-08-09

我认为telnet client可以设置terminal type。

可以抓一个完整的telnet网络数据包看看,在telnet client和telnet server之间进行通信之间,会有很多信息的协商的。
这些信息协商都是根据RFC来的。


如果是Windows操作系统的话,可以查看一下MS的文档,可以进行设置的,虽然只支持3中terminal type。
如果是Linux操作系统的话,也应该可以设置的。


至于network的terminal type问题,如果telnet server是Linux的话,应该可以查看到TERM这个环境变量的,尝试着修改成ansi或者其他的

作者: wunderup   发布时间: 2010-12-15