我们可以利用Scapy库进行网络报文的抓取和分析。
首先,安装环境自不必说,可以参考:
Python抓包练习-Linux_Crazy177的博客-优快云博客
如果希望可以显示不同演示的文本,安装colorma即可【非必须】
pip install colorma
关键代码可以参考如下:
from scapy.all import all
from scapy.layers.http import HTTPRequst
from colorama import init,Fore
init()#初始化colorama
"""以下内容为定义颜色"""
GREEN = Fore.GREEN
RED = Fore.RED
RESET = Fore.RESET
def sniff_packages(iface=None):
#抓取报文的功能函数
iface:
"""参数说明:
因为HTTP使用80端口,filter中只抓取80端口的数据
prn是获取报文后的回调函数
iface:需要抓取哪个网卡的数据
store:是否保存抓取到的报文
"""
sniff(filter="port 80",prn=handle_packet,iface=iface,store=False)
else:
sniff(filter="port 80",prn=handle_packet,store=False)
定义抓包回调处理逻辑:
def handle_packet(package):
#传入抓取到的包作为回调函数
if package.hasLayer(HTTPRequest):
url = package[HTTPRequest].Host.decode() + package[HTTPRequest].Path.decode()
ip = package["IP"].src
method = package[HTTPRequest].Method.decode()
print(f"\n{GREEN}[+]{ip} Requested {url} with {method} {RESET}")
if package.hasLayer(Raw) and method == "POST":
print(f"\n{RED}[*] Some userful Rsw data:{package[Raw].load}{RESET}")
参考文档链接:
How to Sniff HTTP Packets in the Network using Scapy in Python - Python Code