实现指定网口、指定ip、指定数据字节的数据抓取
#抓取网络接口数据
# 指定监控的网络接口和过滤条件
from scapy.all import *
import psutil
# 定义处理接收到的数据包的回调函数
def packet_handler(packet):
# 获取原始数据
raw_data = packet.getlayer(Raw).load
# 指定字节偏移范围(示例为从第 8 字节开始的后 5 个字节)
x1 = offset_start = 8
x2 = offset_end = 12
x3 = offset_start = 54
x4 = offset_start = 56
x5 = offset_start = 94
x6 = offset_start = 134
# 获取指定字节偏移的数据
filtered_data1 = raw_data[x1:x2]
filtered_data2 = raw_data[x3:x4]
filtered_data3 = raw_data[x5:x6]
#输出十六进制数据
#print(raw_data.hex())
# 判断指定字节偏移的数据是否等于特定数值
if filtered_data1 == b'\x00\x00\x4e\x88':
# 打印指定字节偏移的数据
print(f'Received packet1: {filtered_data1.hex()}')
print(f'生命信号: {filtered_data2.hex()}')
print(f'车门状态: {filtered_data3.hex()}')
interface = 'wlan1' #替换为想要筛选的网口名称
destination_ip = '239.255.0.230' # 替换为你要筛选的目的 IP 地址
filter_condition = f'dst {destination_ip}'
# 检查网络连接状态
network_status = psutil.net_if_stats().get(interface)
if network_status is None or not network_status.isup:
print("未找到指定的网络接口或未插入网线")
sys.exit()
# 开始监听并捕获数据包
sniff(iface=interface, filter=filter_condition, prn=packet_handler)
在调试抓取数据的过程中可以使用prints输出中间数据,查看是否为自己想要抓取的数据