过滤pcap pap协议,不用pyshark

时间:2017-12-01 20:50:37

标签: python scapy dpkt pyshark

我想访问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并且它们都安装得很好所以如何将我的代码转换为使用其中一个库

2 个答案:

答案 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)所以我暂时不会接受这个答案