1

我正在尝试使用 scapy 来运行完整的 HTTP 会话。也就是说,我想手动执行三种方式的握手、GET 请求、接收 HTML 文件所需的确认以及终止连接。使用 [1] 我已经完成了三路握手和 GET 请求,但我似乎无法捕获从服务器发送的原始 HTML 数据包,而且我显然无法再发送回一个 ack 数据包。有任何想法吗?

此外,我最终希望能够解析 HTML 的原始数据包。如果有人知道如何从一个 scapy 数据包中做到这一点,我将不胜感激。

[1] http://www.thice.nl/creating-ack-get-packets-with-scapy/

4

1 回答 1

2

金比,

我在工作,现在只能解析而不是在 scapy 中启动连接。所以我会解决你的第二个请求。我们正在查看我在此处提供的内容。包含 html 和 http 请求的层是 (Raw).load 如果数据包包含 html 或 http 请求,我将首先测试该层是否存在(haslayer),然后如果数据包是“http 数据包” “这里只是在 IF 语句中检查 80,但是您可能只使用嗅探网络过滤器中的端口。我在此片段中包含了直接从电线上嗅探或在此处拉入 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,还可以选择例如运动。让我知道这是否有帮助,祝你好运!

PS更改以下

from scapy import *

from scapy.all import *

取决于你的版本..

于 2012-04-18T08:45:28.603 回答