关于python基础教程

关于python爬虫基础教程


1.获取banner脚本

1.获取banner脚本:banner是连上服务器后,服务器响应的第一条欢迎语句。
通常banner会标识正在运行的服务,显示服务名称和版本号。
如:

教程

1.打开交互界面后先导入socket模块(实现双向的通信连接的数据交换)
(socket相当于一个接口)
> >> import socket
2.connect()方法连接服务器
>>> s.connect(("39.107.99.199",21))
3.用recv()方法获取连接信息
s.recv(1024)
'220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 1 of 50 allowed.\r\n220-Local time is now 19:33. Server port: 21.\r\n220-This is a private system - No anonymous login\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.\r\n'
4.然后将其保存在一个变量中。
>>> result=s.recv(1024)
>>> result
'220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 1 of 50 allowed.\r\n220-Local time is now 19:50. Server port: 21.\r\n220-This is a private system - No anonymous login\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.\r\n'>>>
总代码实例:
>>> import socket //导入模块
>>> socket.setdefaulttimeout(2) //设置超时时间,如果两秒钟内无法建立连接就超时退出
>>> s=socket.socket() //实体化对象
>>> s.connect(("39.107.99.199",21)) //建立连接
>>> result=s.recv(1024) //保存信息,接受返回信息中的前1024B数据
>>> result
'220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------\r\n220-You are user number 1 of 50 allowed.\r\n220-Local time is now 19:50. Server port: 21.\r\n220-This is a private system - No anonymous login\r\n220-IPv6 connections are also welcome on this server.\r\n220 You will be disconnected after 15 minutes of inactivity.\r\n'
>>> s.close() //关闭连接
print result/ //输出接受信息
实例测试:
vim GetBannner.py //创建getbanner脚本文件(进入后)
#!/usr/bin/env python
#conding:utf-8 //格式
>>> import socket //导入模块
>>> socket.setdefaulttimeout(2) //设置超时时间,如果两秒钟内无法建立连接就超时退出
>>> s=socket.socket() //实体化对象
>>> s.connect(("39.107.99.199",21)) //建立连接
>>> result=s.recv(1024) //保存信息,接受返回信息中的前1024B数据
>>> s.close() //关闭连接
print result/ //输出接受信息
(按ESC后输入:wq退出设置编辑)
执行程序(有两种方法)
chmod a+x GetBannner.py
python GetBanner.py

代码改进:
加入if后如果版本号有漏洞,则提示可以入侵,没有则提示安全版本(因学习无条件,故随意添加为if测试)
#!/usr/bin/env python
#!/usr/bin/env python
#coding:utf-8
import socket
socket.setdefaulttimeout(2)
s=socket.socket()
s.connect(("39.107.99.199",21))
result=s.recv(1024)
s.close
if ("ftp" in result):
print "okk"else:`print "no"

此时可以加入异常处理解决

得到结果

经过函数修改后爬虫代码

经过for循环批量设置以后修改的爬虫代码

此外我们将会需要改进文件操作修改(目的是部分脚本文件需要爆力破解等等方式,需要调用到字典文件)

导入sys模块用于传递用户输入参数给python解释器和os模块修改后代码

此外该爬虫效率较低,速度较慢,因此采用了多线程改进的方法,此为Getbanner.py用sys.argv()方法输入得

#!/usr/bin/env python
#coding:utf-8
import socket
import sysim
port os
from threading import Thread
if len(sys.argv)!=2: //检测用户是否输入正确
print "正确的使用方法: ",sys.argv[0],"IP列表文件"
print "./testpython.py /root/ip.txt"
sys.exit()
def getbanner(ip,port): //获取服务器FTP端口的bannersocket.setdefaulttimeout(2) `s=socket.socket()
try:
s.connect((ip,21)) //获取banner banner=s.recv(1024)s.close() `return banner
except:pass`defcheckVulns(ip,port): //检测banner是否有漏洞(FTP是随意输入,目的是检测有无服务器)
banner1=getbanner(ip,port) //获取banner
if banner1:
if ("ftp" in banner1):
print ip,"is Vulnerable"
else:
print ip,"is unVulnerable"
else:
print ip,"not get banner"
def main():
filename=str(sys.argv[1].strip()) //判断输入的文件是否存在
if not os.path.exists(filename): print "输入的文件不存在,请重新输入"
sys.exit() f=open(filename,"r") //读取文件中的IP地址
for i in f.readlines():
ip=i.strip("\n")
port=21,
t=Thread(target=checkVulns,args=(ip,port)) //多线程运算
t.start()
f.close()
if __name__=="__main__":
main()

除此之外还有另外一种用选项的方式输入,适合更为复杂的脚本

相关推荐

发表评论

路人甲

网友评论(0)