标签:
利用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) #请求header try: 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"] =+ 1 print("-----------------------------------------------------------------") continue except Exception as e: print("HOST: ", serverip, " 报未知错误") countdict["error"] =+ 1 print("-----------------------------------------------------------------") 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] += 1 else: 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里只有几个网站时的。
这个是添加了许多网站后的。
python3利用socket查看各大网站所用的WEB服务器程序,看看那个用得最多。
标签:
原文地址:http://my.oschina.net/lenglingx/blog/364357