我想访问纸质数据包中数据,目前我使用的是pyshark,代码如下
import pyshark,sys
cap = pyshark.FileCapture('test.pcap',display_filter='ppp && not ppp.length')
for packet in cap:
if packet.pap.get_field_value('peer_id'):
print ('user: '+packet.pap.peer_id+" logged in")它在我的pc和raspberrypi上运行得很好,不幸的是,我想在openwrt/lede路由器上使用这个代码,因为ccache错误,pyshark不能安装在上面:
unable to execute 'ccache_cc': no such file or directory我假设openwrt缺少一些编译器特性,所以我尝试安装其他pcap解析库,并且可以安装scapy、dpkt和pypcapfile,它们都安装得很好,那么如何将代码转换为使用这些库中的一个呢?
发布于 2017-12-04 17:31:04
使用Scapy (使用GitHub的开发版本),您可以尝试:
from scapy.all import PcapReader, PPP_PAP_Request
for pkt in PcapReader('test.pcap'):
if PPP_PAP_Request in pkt:
print(pkt.sprintf('user: %PPP_PAP_Request.username% logged in'))发布于 2017-12-05 16:10:57
多亏了@pierre,我发现开发版本的scapy有了一些新的usefull类(PPP_PAP和PPP_PAP_Request),所以我能够为我的问题写一个有效的代码,它在python2和python3中都可以工作
from scapy.all import PPP,PPP_PAP_Request,sniff
def logusers(pkt):
if PPP_PAP_Request in pkt:
print(pkt[PPP_PAP_Request].username.decode()+" logged in")
sniff(count=0,offline='all.pcap',prn=logusers,filter="pppoes",store=0)我使用嗅探函数是因为我发现它有点轻量级和快速(毕竟我正在尝试在嵌入式系统上运行代码),但尽管如此,它仍然有点慢,我不知道是否有更快的方法(可能不是scapy),所以我暂时不会接受这个答案
https://stackoverflow.com/questions/47601296
复制相似问题