使用scapy完成HTTP GET

时间:2012-04-17 01:45:51

标签: python http html-parsing packet scapy

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

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

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

1 个答案:

答案 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 *

取决于您的版本..