我想访问pap数据包中的数据,目前我正在使用带有以下代码的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")
它在我的电脑和raspberrypi上运行正常我很遗憾,我想在openwrt / lede路由器上使用此代码,由于ccache错误,无法安装pyshark:
unable to execute 'ccache_cc': no such file or directory
我认为openwrt缺少一些编译器功能所以我试图安装其他pcap解析库并且可以安装scapy,dpkt和pypcapfile并且它们都安装得很好所以如何将我的代码转换为使用其中一个库
答案 0 :(得分:0)
使用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'))
答案 1 :(得分:0)
感谢@pierre我发现scapy的开发版本有一些新的有用的类(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)
我使用了sniff函数,因为我发现它有点轻巧和快速(我试图在嵌入式系统上运行代码)但是它仍然有点慢,我不知道是否有更快的东西(也许不是scapy)所以我暂时不会接受这个答案