2019独角兽企业重金招聘Python工程师标准>>>
利用python发送haeder /然后,读取返回的头的信息,看看该网站用的是什么WEB服务器程序。
今天早上看到别人用java写了一个这样的程序,我用就python也现实一个, 本来想把nginx不用版本的算在一起,想想没得必要。结果查看了一下,还是nginx的多,其次是apache,然后是IIS了,Tengine这个也比较多哈,应该可以算成nginx的哈。当然,也有许多公司用的自己写的如百度的BWS,google的GWS。还有CWS和QWS等。
#!/bin/python
import socket#以字典整式来统计各个服务器的数量
countdict = {"error":0}
#请求内容
request = '''HEAD / HTTP/1.1
Accept: */*
Host: %(sip)s
Connection: Keep-Alive'''
#print(countdict)
print("{0:*^6}".format("HOST"), "{0:*^26}".format("WEB SITE"), "{0:*^6}".format("SERVER:"), "{0:*^26}".format("Server Name"))
print("-----------------------------------------------------------------")
fp = open('serverlist.txt', 'r')
for serverip in fp:serverip = serverip.strip()#print(request % dict(sip = serverip) )#针对不同网站替换点请求的Host字段tt = request % dict(sip = serverip)#print(tt)#请求headertry:s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((serverip, 80))s.send( tt.encode() )recv = s.recv(1024)recv = recv.decode()#print(recv.decode())except TimeoutError as te:print("HOST: ", serverip, " 报连接超时错误")countdict["error"] =+ 1print("-----------------------------------------------------------------")continueexcept Exception as e:print("HOST: ", serverip, " 报未知错误")countdict["error"] =+ 1print("-----------------------------------------------------------------")continue#print(recv)recvlist = recv.split('\r\n')for a in recvlist:#if 'Server:' in a and a.startswith('Server:'):if a.startswith('Server:'):servername = a.split(':')[1]#统计应用的服务器名了if servername in countdict:countdict[servername] += 1else:countdict[servername] = 1#格式化打印#print("HOST: ", serverip, "Server: ", servername)print("{0: <6}".format("HOST: "), "{0: <26}".format(serverip), "{0: <6}".format("Server:"), "{0: <26}".format(servername))print("-----------------------------------------------------------------")#打印统计结果
print(countdict)
这个是serverlist.txt里只有几个网站时的。
这个是添加了许多网站后的。