使用套接字库的Python中的HTTP服务器和版本

使用套接字库的Python中的HTTP服务器和版本,python,http,Python,Http,我想知道如何使用套接字库获取HTTP服务器的服务器响应头的web服务器名称和版本: 服务器:Apache/2.2.3(Red Hat)您可能想获取服务器的有趣端口上显示的。对于许多情况,您需要的只是以下内容: import socket 既然您提到了Apache(httpd),我想您会对HTTP的端口80和HTTPS的端口443感兴趣,但老实说,httpd可以监听任何端口。由于这些是HTTP(一种位于TCP之上的协议),所以在响应您之前,他们需要提供一个请求,在这种情况下,您需要发送一个有效的

我想知道如何使用套接字库获取HTTP服务器的服务器响应头的web服务器名称和版本:


服务器:Apache/2.2.3(Red Hat)

您可能想获取服务器的有趣端口上显示的。对于许多情况,您需要的只是以下内容:

import socket
既然您提到了Apache(httpd),我想您会对HTTP的端口80和HTTPS的端口443感兴趣,但老实说,httpd可以监听任何端口。由于这些是HTTP(一种位于TCP之上的协议),所以在响应您之前,他们需要提供一个请求,在这种情况下,您需要发送一个有效的HTTP请求。最基本的最小值是
GET/HTTP/1.0\r\n\r\n
,因此在这种情况下,您需要类似以下内容:

import sys
import socket

ip = sys.argv[1]
port = int(sys.argv[2])

s = socket.socket()

s.connect((ip, port))
print s.recv(1024)
注意
recv
之前的
send

您可以这样运行该脚本:

import sys
import socket

ip = sys.argv[1]
port = int(sys.argv[2])

s = socket.socket()

s.connect((ip, port))
s.send("GET / HTTP/1.0\r\n\r\n")
print s.recv(1024)

注意
-sV
启用服务器和版本检查。还要注意的是,你可能不想用这个来攻击谷歌太多次,因为他们可能会非常好奇。

任何合适的HTTP库,包括Python的标准库,都可以让你这么做。如果你想要例子,请详细说明你试图解决的问题。这取决于你使用的是哪个库,但这绝对是可能的。请编辑这个问题。对不起。我对Python很陌生。我没有意识到我必须从我正在使用的图书馆获得这些信息。非常感谢你的回答。我应该指定我正在编写一个web服务器,并且需要web服务器版本来为服务器响应头构建一个字符串。我发现这个代码很有效。导入子流程web\u version=subprocess。检查输出([“apache2”,“-v”])web\u line=web\u version.split('\n')[0]web\u info=web\u line.split(':')[1]web\u server\u header=“server:”+web\u info+“\n”您应该知道,可执行文件的输出不是它发送给客户端的内容。关于这一点,请参见我答案中的第二段和第三段代码。
$ python grab_banner.py <IP_ADDRESS> <PORT>
HTTP/1.1 200 OK
Date: Sat, 24 Oct 2015 03:12:31 GMT
Server: Apache/2.4.16 (Fedora)
Last-Modified: Sat, 24 Oct 2015 03:06:19 GMT
ETag: "17-522d1031eac3e"
Accept-Ranges: bytes
Content-Length: 23
Connection: close
Content-Type: text/html; charset=UTF-8

<h1>Hello, World!</h1>
$ sudo yum install nmap
...
$ nmap -sV google.com

Starting Nmap 6.47 ( http://nmap.org ) at 2015-10-23 22:45 EDT
Nmap scan report for google.com (204.186.215.24)
Host is up (0.013s latency).
Other addresses for google.com (not scanned): 204.186.215.38 204.186.215.39 204.186.215.46 204.186.215.45 204.186.215.32 204.186.215.59 204.186.215.31 204.186.215.18 204.186.215.25 204.186.215.53 204.186.215.52
rDNS record for 204.186.215.24: cache.google.com
Not shown: 998 filtered ports
PORT    STATE SERVICE  VERSION
80/tcp  open  http     Google httpd 2.0 (GFE)
443/tcp open  ssl/http Google httpd 2.0 (GFE)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.02 seconds