使用Scapy分析数据包中的html路径



我正在制作一个使用scapy重新发送http数据包的应用程序。当scapy嗅探数据包时,它将从头部检查源ip和目标路径。然后重新发送到它应该去的地方。

这里有一个标题的例子:

Url:192.168.50.X:XXX/PathInUrl

GET /thePathInUrl HTTP/1.1
Host: 192.168.50.250:448
Content-Type: text/plain
Content-Length: 12
this is body

我想得到"/PathInUrl";

我研究了很多关于scapy的解决方案。其中许多已经过时,不适用于最新的scapy或python3。也许我只是误解了答案。

以下是我以前尝试过的一些解决方案:

Scapy 中的HTTP GET数据包嗅探器

def http_header(packet):
http_packet=str(packet)
if http_packet.find('GET'):
print GET_print(packet)

这个给我回了一个空的[]。

SCAPY HTTP请求URL PCAP

http_layer= packet.getlayer('HTTPRequest').fields
ip_layer = packet.getlayer('IP').fields
print('n{0[src]} just  requested a {1[Method]} {1[Host]}{1[Path}]}'.format(ip_layer,http_layer))

这个说HTTPRequest不存在于我的包中

还使用lambda表达式尝试了一些答案。但是返回了几个错误。

print("catch packets")
pkts=sniff(filter="port 448",count=1,)

for xx in pkts:

print(type(xx))

我还试着打印我闻到的

<类'scapy.layers.l2.Ether'>

这就是它打印的内容。看起来不对?我希望列表中有一个数据包变量。或者是否有其他方法适合这种情况?

在选择scapy作为解决方案之前。我用socket作为解析器。但它似乎做了一些工作,不仅仅是为我接收数据包。所以我决定转向scapy。我犯的关键错误是我忘记了我必须自己启动连接。当我最终使用wireshark诊断流量时,它看起来还处于启动三向握手的阶段。毫无疑问,为什么斯皮什么也没回,只是空荡荡的。

我还没有尝试实现握手代码。我将在测试时进行更新。*编辑:试用后效果良好。

最新更新