python3利用socket查看各大网站所用的WEB服务器程序,看看那个用得最多。

利用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里只有几个网站时的。

这个是添加了许多网站后的。


时间: 2024-08-23 22:55:42

python3利用socket查看各大网站所用的WEB服务器程序,看看那个用得最多。的相关文章

【转】VS2010新建Web网站与新建Web应用程序的区别

在Visual Studio 2010中,除了可以使用"创建Web应用程序"的方式来构建自己的Web项目之外,还可以通过创建"Web网站"的方式来构建Web项其中,Web网站的创建方法:打开Visual Studio 2010主窗体,在菜单栏里选择"文件"|"新建|网站"命令,在弹出的"新建网站"窗体里可以通过"ASP.NET 网站"和"空网站"这两种模板来创建自己的

10大优秀的移动Web应用程序开发框架推荐

在最近几年里,移动互联网高速发展.市场潜力巨大.继计算机.互联网之后,移动互联网正掀起第三次信息技术革命的浪潮,新技术.新应用不断涌现.今天这篇文章向大家推荐10大优秀的移动Web开发框架,帮助开发者更加高效的开发移动Web应用. Sencha Touch Framework Sencha Touch 是世界上第一个基于 HTML5 的移动 Web 开发框架,支持最新的 HTML5 和 CSS3 标准,全面兼容 Android 和 Apple iOS 设备,提供了丰富的 WEB UI 组件,可以

Java Socket编程(五) 简单的WEB服务器

简单的WEB服务器 一个简单的WEB服务器将由列表9.2这样构建.当然,还必须要对方法和回应事件进行改进.简单的服务器不会分析和存储请求头.新的WEB服务器将分析和存储请求,为以后的处理作准备.为了达到这个目的,你必须有一个包含HTTP请求的类. HTTPrequest类 列表9.5列出了一个完整的HTTPrequest类.这个类必须包括一个请求头所需的所有信息. 列表9.5.HTTPrequest类. import java.io.*; import java.util.*; import j

ASP.NET网站怎么发布 Web项目程序怎么发布部署(暂时收藏)

Web程序如何发布部署呢.网站项目做好了,需要发布出来,提交给客户,装上服务器.那怎么在ASP.NET开发环境中将网站程序发布出来呢 ^_^ 工具/原料 Visual Studio 2010  ( 其他 VS 开发环境类似 ) 完成的项目程序 方法/步骤 在要发布的项目上右击,选择[发布]   在发布Web对话框中,选择发布方法为文件系统   选择要发布的路径,点击[发布]   在发布路径下,已经生成了发布的文件系统 然后就可以在IIS上发布网站啦  #^_^# END 注意事项 发布好的程序,

Python Socket基础学习,注意,需要先开服务器程序,在开客户端程序,

服务器端 # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from socket import * from time import * HOST='' PORT=1122#侦听端口 BUFSIZ=1024 ADDR=(HOST,PORT) sock=socket(AF_INET,SOCK_STREAM) sock.bind(ADDR) sock.listen(5) #条件 STOP_CHAT=False whi

将网站项目转为 Web form应用程序(转)

转自 http://blog.sina.com.cn/s/blog_53729e4601014ze9.html 本文介绍如何将现有的 Microsoft Visual Studio 2005 网站项目转换为 Microsoft Visual Studio 2005 Web 应用程序项目.Web 应用程序项目模型使用的概念方法与 Visual Studio .NET 2003 中的 Web 项目相同.该概念方法包括一个项目文件,用于将文件和编译包含到单个程序集中,或将它们排除在外. 要完成转换操作

详谈socket请求Web服务器过程(转)

最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生. 而有人或许会问:众所周知,HTTP协议有两大特性,一个是“无连接”性,一个是“无状态”性.这里的“无连接”岂不是跟上面的说法有冲突?其实这里并没有矛盾,只是人们对“连接”这个词的理解有差异.首先我们来看一下浏览器向Web服务器发出Http请求以及Web服务器给浏览器回复的过程: 1)浏览器创建Socket,按给定I

Web 应用程序项目与 Visual Studio 中的网站项目的异同

要查看英语原文,请勾选“英语”复选框.也可将鼠标指针移到文本上,在弹出窗口中显示英语原文. 翻译 英语 本文档已存档,并且将不进行维护. Web 应用程序项目与 Visual Studio 中的网站项目 在Visual Studio可以创建 Web 应用程序项目 或 网站项目. 通过选择 新建项目 或 打开项目 创建或打开一个 Web 应用程序项目在Visual Studio 文件 菜单. 通过选择 新建网站 或 打开网站 创建或打开一个网站项目在"文件"菜单. 每种项目类型各有优缺点

详谈socket请求Web服务器过程

最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生. 而有人或许会问:众所周知,HTTP协议有两大特性,一个是“无连接”性,一个是“无状态”性.这里的“无连接”岂不是跟上面的说法有冲突?其实这里并没有矛盾,只是人们对“连接”这个词的理解有差异.首先我们来看一下浏览器向Web服务器发出Http请求以及Web服务器给浏览器回复的过程: 1)浏览器创建Socket,按给定I