首页 > 编程 > Python > 正文

python远程登录代码

2020-01-04 18:06:55
字体:
来源:转载
供稿:网友

因为 python 已内建了一个 pop3 的函式库,所以我们直接用它来完成邮件的下载和处理。事实上, 如果我们不用 poplib 的话,我们还是可以完成那个例子中的所有作业:就是通过模拟 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'则等于'pcheung/n'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,,'/015/012/015/012Linux(somehost)/015/012/015/015/012/015login:')(0,,'Password:')(0,,'/015/012YupRelease2.6somehost/015/012Lastlogin:WedMar618:21:01GMT2002byUNKNOWN@xxx.xxx.xxx.xxxyouhavemail/015/012somehost: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是'>'或是'>>>'都没有关系了。

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表