[英]Printing HTTP header on terminal
我目前正在使用 python 和 pcap 创建一个数据包嗅探器。 遵循此代码后: https : //www.binarytides.com/code-a-packet-sniffer-in-python-with-pcapy-extension/
我能够解析 IP 和 TCP 标头以获取源地址、端口号等值。我只需要 HTTP 请求/响应,因此我过滤掉了仅保留端口号为 80 的请求/响应。
但是,我真的很困惑如何打印出 HTTP 标头的实际值。 我应该在哪里以及如何让下面的图像出现在我的 MacOS 终端上?
提前致谢。
如果您将http_response_data
变量中的 HTTP 响应数据包数据作为 python bytes
类型,您可以在一行中获得响应标头:
headers_text = http_response_data.partition(b'\r\n\r\n')[0].decode('utf-8')
print(headers_text)
此外,如果 HTTP 标头不是 UTF-8 编码,您可能需要使用'cp852'
而不是'utf-8'
。
这考虑到了这样一个事实,即 HTTP 标头与 HTTP 内容正文由两个换行符分隔(所有标头行仅由一个换行符分隔)。
接下来是使用标准socket
库从 Google 服务器的 TCP 端口 80 接收 HTTP 字节响应的上述使用解决方案的小示例。
import socket
s = socket.socket()
s.connect(('google.com', 80))
s.send(b'GET / HTTP/1.1\r\n\r\n')
s.shutdown(socket.SHUT_WR)
http_response_data = s.recv(8192) # TCP response stored as bytes
s.close()
headers_text = http_response_data.partition(b'\r\n\r\n')[0].decode('utf-8')
print(headers_text)
附注:
.decode('utf-8')
尝试其他编码/代码页,例如.decode('cp852')
。headers_text
还将包含状态行,如HTTP/1.1 200 OK
如果您不需要它(如果只有key: value
行很重要),您可以使用下一个代码:headers_text = http_response_data.partition(b'\r\n\r\n')[0].partition(b'\r\n')[2].decode('utf-8')
print(headers_text)
if protocol == 6 :
block as data
variable,在我的解决方案中将其用作http_response_data
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.