Python2.7 - 重构数据包以打印html

时间:2015-09-17 21:23:52

标签: python-2.7 http scapy sniffing

使用wireshark,我可以看到我要求的html页面(段重建)。我无法使用pyshark执行此任务,因此我转向scapy。使用scapy和sniffing wlan0,我可以使用以下代码打印请求标头:

from scapy.all import *

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

def GET_print(packet1):
    ret = packet1.sprintf("{Raw:%Raw.load%}\n")
    return ret

sniff(iface='wlan0', prn=http_header, filter="tcp port 80")

现在,我希望能够重新构建查找图像的完整请求并打印所请求的html页面。

2 个答案:

答案 0 :(得分:2)

您要搜索的是

  • IP数据包碎片整理
  • TCP Stream重组

请参阅here

<强> Scapy的

通过defragment([list_of_packets,])提供尽力而为的ip.defragmentation,但不提供通用的tcp流重组。无论如何,here's一个非常基本的TCPStreamReassembler可能适用于您的用例,但在无效假设上运行,连续流将被拆分为最大段大小(mss)的段。它会将段== mss连接起来直到一个段&lt; mss被发现了。然后它将使用完整的有效负载吐出重新组装的TCP数据包。

注意 TCP流重组并非易事,因为您必须处理重传,排序,确认,......

<强> tshark的

根据this answer tshark有一个等同于wiresharks的命令行选项&#34;跟随tcp stream&#34;这需要一个pcap并为所有tcp会话创建多个输出文件/&#34;会话&#34;

因为看起来pyshark只是tshark二进制文件的接口,所以如果它尚未实现,那么实现该功能应该非常简单。

答案 1 :(得分:0)

使用Scapy 2.4.3+,您可以使用

sniff([...], session=TCPSession)

重建HTTP数据包