原始的Scapy对http抓包的支持不够友好,数据包的分割只能到TCP级别,需要编码将TCP包合并为HTTP数据包,操作起来很不方便,这里需要使用一个scapy_http包来支持http的解包
from scapy.all import *
import scapy_http.http
def printPacket(packet):
if packet.haslayer('HTTP'):
print("============================")
print(packet.payload.payload.payload.show())
sniff(prn=printPacket)
首先可以使用haslayer来判断是否为HTTP包,然后一层一层获取HTTP载荷
第一层:packet,网卡数据
第二层:packet.payload,IP数据包
第三层:packet.payload.payload,TCP数据包
第四层:packet.payload.payload.payload,HTTP数据包
还有第五层,其实就是HTTP的响应数据,即除了报文头信息之外的响应体