我正在尝试使用scapy来运行完整的HTTP会话。也就是说,我想手动执行三次握手,GET请求,接收HTML文件所需的确认,以及终止连接。使用[1]我已经完成了三次握手和GET请求,但我似乎无法捕获从服务器发送的原始HTML数据包,而且我显然无法再发送一个ack数据包。有什么想法吗?
此外,我最终希望能够解析HTML的原始数据包。如果有人知道如何从一个scapy数据包中做到这一点,我会很感激。
[1] http://www.thice.nl/creating-ack-get-packets-with-scapy/
答案 0 :(得分:2)
Gimbi,
我正在工作,现在只能解析并且不能在scapy中启动连接。所以我将解决你的第二个请求。我们正在寻找像我在这里提供的东西。包含html和http请求的层是(Raw).load如果数据包包含html或http请求我将首先测试该层是否存在(haslayer)然后如果数据包是'http数据包“这里只是在IF语句中检查80,但是你可能只是使用sniff 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,还可以选择运动。让我知道这是否有帮助,祝你好运!
<强> P.S。更改以下
from scapy import *
到
from scapy.all import *
取决于您的版本..