使用Python抓取网络数据包通常需要安装一些第三方库,如`scapy`、`pyshark`或`dpkt`。以下是使用这些库进行网络抓包的步骤和示例代码:
安装必要的库
pip install scapy
pip install pyshark
pip install dpkt
导入库
from scapy.all import *
import pyshark
import dpkt
捕获网络数据包
使用Scapy库
def packet_handler(packet):
print(packet.summary())
sniff(prn=packet_handler, filter="tcp")
使用PyShark库
cap = pyshark.FileCapture('captured_packets.pcap')
for packet in cap:
print(packet)
使用dpkt库
sniff(count=100, prn=lambda x: x.show())
分析数据包
使用PyShark库
cap = pyshark.FileCapture('captured_packets.pcap')
for packet in cap:
print(packet)
使用dpkt库
sniff(count=100)
保存数据包到文件
with open('demo.pcap', 'wb') as f:
f.write(sniff(count=100))
过滤条件
你可以设置过滤条件来捕获特定类型的数据包,例如:
sniff(iface="eth0", filter="tcp port 80", prn=packet_handler)
获取特定进程的网络包
要抓取特定进程的网络包,可以使用`pyshark`或`scapy`结合系统工具如`ps`或`tasklist`。
使用PyShark
import psutil
import pyshark
chrome_pid = 1234 Chrome浏览器的进程ID
chrome_process = psutil.Process(chrome_pid)
chrome_network_io = chrome_process.io_counters(pernic=True)
for conn in chrome_network_io:
print(f"进程ID: {chrome_pid}, 网络接口: {conn}, 发送字节: {conn}, 接收字节: {conn}")
使用Scapy
from scapy.all import *
def packet_handler(packet):
print(packet.summary())
sniff(iface="eth0", filter="tcp", prn=packet_handler)
请注意,抓包可能涉及隐私和安全问题,请确保在合法和道德的范围内使用抓包技术。