使用wireshark,我可以看到我请求的html页面(段重建)。我无法使用pyshark来完成这个任务,所以我转而使用scapy。使用scapy和嗅探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页面。
您要查找的是
- IP数据包整理
- TCP流重组
看到
scapy
通过defragment([list_of_packets,])
提供最佳的ip碎片整理,但不提供通用的tcp流重组。无论如何,这里有一个非常基本的TCPStreamReassembler,它可能适用于您的用例,但是操作的无效假设是,即连续的流将被分割成最大段大小(mss)的段。它将连接段== mss,直到一个段<找到了MSS。然后,它将吐出一个带有完整有效载荷的重新组装的TCP数据包。>
注意 TCP流重组不是微不足道的,因为你必须照顾重传,排序,ack,…
tshark
根据这个答案,tshark有一个相当于wireshark的命令行选项"follow TCP stream",它接受一个pcap并为所有TCP会话/"conversation"创建多个输出文件
因为pyshark看起来只是tshark二进制文件的一个接口,所以如果还没有实现,那么实现这个功能应该是非常直接的。
对于Scapy 2.4.3+,您可以使用
sniff([...], session=TCPSession)
重建HTTP数据包