python---pexpect使用ftp下载文件
2017-12-25 18:36
567 查看
python—pexpect使用ftp下载文件
参考:https://www.cnblogs.com/dkblog/archive/2013/03/20/2970738.html
root@kali:~/python/anquangongji# root@kali:~/python/anquangongji# pwd /root/python/anquangongji root@kali:~/python/anquangongji# ls checkfile.py dictionary.txt passwordunix.txt pexpectftplogin.py pexpectshhusecommand.py scanmultports.py vulnftpbanner.txt crarkpassword.py openfiletest.py pexpectcreaksshpassword.py pexpectshhnocommand.py scanerftpbanner.py vulnbanners.txt root@kali:~/python/anquangongji#
root@kali:~/python/anquangongji# cat pexpectftplogin.py #!/usr/bin/python # --*-- coding:utf-8 --*-- import pexpect ipAddress = "192.168.40.239"#即将ftp所有登录的远程主机的域名或IP地址 loginName = "test"#登录用户名 loginPassword = "qwe123456"#用户的登陆密码 cmd = "ftp " + ipAddress#拼接ftp命令,ftp后面必须带一个空格 child = pexpect.spawn(cmd)#利用 ftp 命令作为 spawn 类构造函数的参数,生成一个 spawn 类的对象 index = child.expect(["(?i)name","(?i)Unknown host",pexpect.EOF,pexpect.TIMEOUT])# 期望具有提示输入用户名的字符出现 if (index == 0):#匹配到了 "(?i)name",表明接下来要输入用户名 child.sendline(loginName)#发送登录用户名 + 换行符给子程序 index = child.expect(["(?i)password",pexpect.EOF,pexpect.TIMEOUT])#期望 "(?i)password" 具有提示输入密码的字符出现. if (index != 0):#匹配到了 pexpect.EOF 或 pexpect.TIMEOUT,表示超时或者 EOF,程序打印提示信息并退出. print "ftp login failed" child.close(force=True) child.sendline(loginPassword)#匹配到了密码提示符,发送密码 + 换行符给子程序. index = child.expect(["ftp>","Login incorrect","Service not available",pexpect.EOF,pexpect.TIMEOUT])#期望登录成功后,提示符 "ftp>" 字符出现. if (index == 0):#匹配到了 'ftp>',登录成功 print "Congratulation!! ftp login correct!!" child.sendline("bin")#发送 'bin'+ 换行符给子程序,表示接下来使用二进制模式来传输文件 print "getting a file......." child.sendline("get text.txt")#向子程序发送下载文件text.txt的命令,即在服务器上下载text.txt文件 """ 期望下载成功后,出现 'Transfer complete.*ftp>',其实下载成功后, 会出现以下类似于以下的提示信息: 200 PORT command successful. 150 Opening data connection for rmall (548 bytes). 226 Transfer complete. 548 bytes received in 0.00019 seconds (2.8e+03 Kbytes/s) 所以直接用正则表达式 '.*' 将 'Transfer complete' 和提示符 'ftp>' 之间的字符全省去. """ index = child.expect(["Transfer complete. *ftp>",pexpect.EOF,pexpect.TIMEOUT]) #print index if (index == 2):#匹配到了 pexpect.EOF 或 pexpect.TIMEOUT,表示超时或者 EOF,程序打印提示信息并退出. print "failed to get the file" child.close(force=True) print "successfully received the file"#匹配到了 'Transfer complete.*ftp>',表明下载文件成功,打印成功信息,并输入 'bye',结束 ftp session. child.sendline("bye") elif (index == 1): #用户名或密码不对,会先出现 'Login incorrect',然后仍会出现 'ftp>',但是 pexpect 是最小匹配,不是贪婪匹配, #所以如果用户名或密码不对,会匹配到 'Login incorrect',而不是 'ftp>',然后程序打印提示信息并退出. print "You entered an invalid login name or password. Program quits!" child.close(force=True) else: #匹配到了 'Service not available',一般表明 421 Service not available, remote server has #closed connection,程序打印提示信息并退出. #匹配到了 pexpect.EOF 或 pexpect.TIMEOUT,表示超时或者 EOF,程序打印提示信息并退出. print "ftp login failed! index = " + index child.close(force=True) elif index == 1:#匹配到了 "(?i)Unknown host",表示 server 地址不对,程序打印提示信息并退出 print "ftp login failed, due to unknown host" child.close(force=True) else:#匹配到了 pexpect.EOF 或 pexpect.TIMEOUT,表示超时或者 EOF,程序打印提示信息并退出 print "ftp login failed, due to TIMEOUT or EOF" child.close(force=True) root@kali:~/python/anquangongji#
参考:https://www.cnblogs.com/dkblog/archive/2013/03/20/2970738.html
相关文章推荐
- Python在使用FTP下载上传文件时遇到中文名称和路径时的解决办法
- 如何使用Python 下载FTP的文件
- python使用urllib下载ftp文件
- jaVA使用FTP上传下载文件的问题
- 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名
- 使用sun.net.ftp下载、上传文件完整版
- 一个简单的使用wininet的http/ftp文件下载程序
- VB.NET中使用FTP下载文件的两种方法
- 【转】使用FtpClient类实现FTP文件上传下载
- 使用FTP命令自动完成文件的上传和下载
- linux ftp命令使用,下载文件
- 使用python脚本下载www.wuxia.net.cn上的书籍,并且将它们合并成一个文件
- 使用ftp命令上传和下载文件
- 使用FtpWebRequest 类操作(上传、下载和删除)FTP上的XML文件
- VB.NET中使用FTP下载文件的两种方法。
- 使用edtftpj进行ftp文件上传和下载
- 【用Python写爬虫】获取html的方法【四】:使用urllib下载文件
- 用wget使用认证用户从ftp站点下载文件
- jaVA使用FTP上传下载文件的问题
- Linux shell中使用ftp自动下载上传文件