python远程登录代码_python教程-查字典教程网
python远程登录代码
python远程登录代码
发布时间:2016-12-28 来源:查字典编辑
摘要:在python中有一个telnetlib,它的作用就是建立一个通到主机的telnet连线实体,然后向主机传送命令(就像用键盘输入一样)并从该...

在python中有一个telnetlib,它的作用就是建立一个通到主机的telnet连线实体,然后向主机传送命令(就像用键盘输入一样)并从该连线接收数据。利用它,我们可以把示范1的所有内容从"人-机'交流变成'机-机'交流,这样也可以做到处理pop3邮箱的工作。不过既然我们已经试过了pop3,这一次可以试用真的telnet埠23做些好玩的东西。

以下是代码片段:1#telnetdo.py2#!/usr/bin/envpython34deftelnetdo(HOST=None,USER=None,PASS=None,COMMAND=None):#定义一个函数,这将要用它会很容易5importtelnetlib,sys67ifnotHOST:#如果没有给出所要的资料,则要求用户输入8try:9HOST=sys.argv[1]#记得吧,序列是从0开始数的,而sys.argv[0]会是你程式的名字10USER=sys.argv[2]11PASS=sys.argv[3]12COMMAND=sys.argv[4]13except:14print"Usage:telnetdo.pyhostuserpass'command'"15return1617msg=['Debugmesages:n']#这个用来存起所有从主机传回的讯息,作除错时很有用1819tn=telnetlib.Telnet()#准备一个telnet连线的实体20try:21tn.open(HOST)#连接端绑定到主机HOST去22except:23print"Cannotopenhost"24return2526msg.append(tn.expect(['login:'],5))#等待主机传回含有'login:'字符的讯息,等候时限为5秒27tn.write(USER+'n')#向主机送出字串USER+'n',如USER是28#'pcheung'则等于'pcheungn'29ifPASS:#就像是在键盘打入一样。30msg.append(tn.expect(['Password:'],5))#如果有password要打的话就送出密码字串,31tn.write(PASS+'n')#但首先要等主机传回含有'Password:'字样的讯息3233msg.append(tn.expect([USER],5))#因为通常登入后主机会显示出登入者名称,我们在主机回应中找这34#样的字符,如有的话则代表登入成功了35tn.write(COMMAND+'n')#向主机发出指令36msg.append(tn.expect(['%'],5))#等5秒,如果程式完成了一般我们会收到37#shellprompt吧,假设为'%'38tn.close()#关闭连线39deltn40returnmsg[len(msg)-1][2]#把收到的讯息通通传回去。41#(注意msg中第2个元素才是真的讯息,42#其他是附加资讯。4344if__name__=='__main__'#这是python常用的技巧:如果telnetdo.py程式45#是从commandprompt46#引发的话则__name__的内容为__main__,相反47#如果是从别的程式用importtelnetdo的话则48#__name__会变成'telnetdo'49printtelnetdo()#这样写的好处是从此telnetdo会成为你的扩展50#模组,你可以在别的程式中51#用telnetdo.telnetdo(HOST,USER,PASS,COMMAND)来调用它!

这个程式用法如下:

以下是代码片段:>chmod+xtelnetdo.py>telnetdo.py'somehost''glace''xxxxxx''ls-lF'(0,<SRE_Matchobjectat200f75a8>,'15121512Linux(somehost)151215151215login:')(0,<SRE_Matchobjectat20124848>,'Password:')(0,<SRE_Matchobjectat20103e08>,'1512YupRelease2.6somehost1512Lastlogin:WedMar618:21:01GMT2002byUNKNOWN@xxx.xxx.xxx.xxxyouhavemail1512somehost:glace%')total320-rw-r--r--1glaceuser139788Feb817:54PQR2.1.txtdrwxr-xr-x3glaceuser4096Feb1016:45mytts/drwxr-xr-x3glaceuser4096Jan2919:03sample/drwxr-xr-x2glaceuser4096Jan616:38tex/drwxr-xr-x2glaceuser4096Sep52001tmp/drwxr-xr-x2glaceuser29Feb232001tools/drwxr-xr-x2glaceuser26Feb618:43trash/somehost:glace%可以看到执行的结果和一些附加的资讯。这就是远端执行程式了。就算没有rsh,照用可也。哈,很方便吧。不过你应该留意到了程式执行时只等候了5秒,就是说如果你要向主机发出像'find.-namexxx-print'这样的命令应该等不到执行完这个telnetsession就会被关闭了。不过仔细想一下,这要紧吗?我们现在所能做到的和真正人手telnet的差别并不大,想一想你会怎样解决长时间执行的问题?没错,就是'nohup'和背景作业了。就是说只要把程式呼叫改成:telnetdo.py'apocal''pcheung''xxxxxx''nohupmyprogram_or_script&'就行了。如此一来,就算对方主机的shellprompt是'>'或是'>>>'都没有关系了。

(注意安全性并非是这类范例程式的着重点,因此并不建议在实际工作中用它.)

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新python学习
    热门python学习
    脚本专栏子分类