0

我想访问 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,它们都安装得很好,所以我怎样才能将我的代码转换为使用这些库之一

4

2 回答 2

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)

我使用了嗅探功能,因为我发现它有点轻巧和快速(毕竟我试图在嵌入式系统上运行代码)但是它仍然有点慢而且我不知道是否有更快的东西(也许其他比scapy)所以我暂时不会接受这个答案

于 2017-12-05T08:10:57.303 回答
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'))
于 2017-12-04T09:31:03.957 回答