我正在尝试使用 scapy 运行完整的 HTTP session 。也就是说,我想手动执行三次握手、GET 请求、接收 HTML 文件所需的确认以及终止连接。使用 [1] 我已经完成了三次握手和 GET 请求,但我似乎无法捕获从服务器发送的原始 HTML 数据包,而且我显然无法发送回更多的 ack 数据包。有什么想法吗?
此外,我最终希望能够解析 HTML 的原始数据包。如果有人知道如何从 scapy 数据包中做到这一点,我将不胜感激。
[1] http://www.thice.nl/creating-ack-get-packets-with-scapy/
最佳答案
金比,
我在工作,现在只能在 scapy 中解析不能发起连接。所以我会处理你的第二个请求。我们正在寻找类似我在这里提供的东西。包含 html 和 http 请求的层是 (Raw).load 如果数据包包含 html 或 http 请求,我会首先测试该层是否存在 (haslayer),然后如果数据包是 'http 数据包“这里只是检查 IF 语句中的 80,但是您可能只使用嗅探 netfilter 中的端口。我已经包含了直接嗅探线路或在此代码段中拉入 pcap 的选项。(调整端口等)如果您使用的是非标准)
#!/usr/bin/python -tt
from scapy import *
import sys
def parse(pkt):
if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw):
print pkt.getlayer(Raw).load
if '-l' in sys.argv:
sniff(prn=parse)
else:
pkts = rdpcap(sys.argv[1])
for pkt in pkts:
parse(pkt)
当然,以此为开端,您可以调整第 8 行以不仅接收 dport,还接收 sport 等。让我知道这是否有帮助,祝你好运!
附言更改以下内容
from scapy import *
到
from scapy.all import *
取决于你的版本..
关于python - 使用 scapy 完成 HTTP GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10184016/