如何将Pyshark读取的PCAP数据包转换为二进制值?
将Pyshark捕获的数据包转换为二进制并重新发送
嘿,刚好我之前做过类似的操作,这就教你怎么把Pyshark读取到的数据包转换成可用于网络发送的二进制数据:
核心方法:获取原始二进制数据包
Pyshark的每个Packet对象都自带了获取原始二进制内容的方法,直接调用就能拿到和pcap文件里完全一致的字节流,步骤如下:
- 读取pcap文件后,直接调用数据包的
get_raw_packet()方法,它会返回bytes类型的二进制数据,这正是你需要的:
import pyshark pcap_dir = "你的pcap文件路径" packets = pyshark.FileCapture(pcap_dir) # 获取第一个数据包的二进制原始数据 raw_binary_packet = packets[0].get_raw_packet()
- 如果你使用的是较旧版本的Pyshark,也可以尝试访问
raw_packet属性(不过更推荐用上面的方法,兼容性更好):
raw_binary_packet = packets[0].raw_packet
用二进制数据重新发送数据包
拿到二进制数据后,你可以用Python的socket模块创建原始套接字来发送,示例代码如下(注意:需要管理员/root权限运行):
import socket # 创建原始套接字,适用于Linux链路层发送 # Windows下可改用AF_INET结合SOCK_RAW,需调整协议参数 sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0003)) # 绑定到你的网卡接口,比如"eth0"或"wlan0",根据实际情况修改 sock.bind(("eth0", 0)) # 发送二进制数据包 sock.send(raw_binary_packet) # 关闭套接字 sock.close()
关键注意事项
- 权限要求:使用原始套接字发送数据包通常需要管理员/root权限,Linux下要加
sudo运行脚本,Windows下需要以管理员身份启动命令提示符或IDE。 - 网卡绑定:必须绑定到正确的网卡接口,否则数据包无法正确投递到目标网络。
- 数据包适配:如果原数据包的MAC/IP地址是针对特定设备的,直接发送可能无法被目标接收,必要时可以先解析数据包修改相关字段后再转换为二进制发送。
内容的提问来源于stack exchange,提问作者Ahmed Hussein
相关产品推荐
相关产品推荐

