pypcap是一个对libpcapC库进行封装和简化的面向对象的抓包工具库,可以非常方便的用于抓包和过滤,结合dpkt解析库可以完成许多网络数据包的抓取和分析。本文讲述的就是如何使用pypcap及dpkt库实现简单抓包工具,也称为嗅探器(sniffer)。

PyPCAP 这是libpcap(当前tcpdump.org版本)和Windows的WinPcap端口简化的面向对象的Python包装器。

Linux 端安装 pypcap

  1. sudo apt-get install libpcap-dev
  2. sudo pip install pypcap
  3. 复制代码

这里有个问题,如果使用Anaconda目录的pip安装则可能失败,目前原因未明,但官方的python3对应的pip3python2对应的pip均无此问题。

因为本人主要在Win10下抓包,接下来,着重记录win10下pypcap的安装过程:

根据pypcap官方说明:

WinPcap has compatibility issues with Windows 10, therefore it's recommended to use Npcap (Nmap's packet sniffing library for Windows, based on the WinPcap/Libpcap libraries, but with improved speed, portability, security, and efficiency). Please enable WinPcap API-compatible mode during the library installation.

WinPcap与Windows 10存在兼容性问题,因此建议使用Npcap (Nmap的Windows数据包嗅探库,基于WinPcap / Libpcap库,但具有提高的速度,可移植性,安全性和效率)。在库安装过程中,请启用WinPcap API兼容模式。

今天在windows10环境下,python3 下面安装pypcap,然后各种报错。报错内容如下:

下载文件

  1. pypcap 源码
  2. Npcap
  3. Npcap SDK

安装

  • 安装Npcap

安装下载后的Npcap安装包,如果电脑带有无线网卡,记得勾选“support raw 802.11 traffic(and monitor mode) for wireless adapters”。需要注意的是,如果电脑已经安装过winpcap软件,在安装Npcap时会弹窗提示卸载Winpcap,此时需要关闭wireshark或是其它相关的软件。

pcd格式如何解码python python pcap解析_python

因为在安装wireshark时已经安装了Npcap,所以未再专门安装。

  • 安装pypcap
  1. Npcap SDK文件夹和pypcap源码文件夹放在一个目录下
  2. Npcap SDK文件夹名称修改为wpdpack
  3. 进入pypcap源码目录,执行python setup.py install即可完成安装

但在第三步安装过程,首先遇到:

pcd格式如何解码python python pcap解析_python_02

按照网上教程,使用Microsoft Visual C++ Build Tools:

因为直接去安装一个visual Studio十几个G也不是不行,但是好像也不是很方便,采用Microsoft Visual C++ Build Tools来解决也是很不错的方式。

但上述方法在使用过程中实际出现了安装包损坏或者其他的问题,无法使用的问题,为此我也找了解决方案,从Internet下载包总是失败,所以采用离线下载的方式,来离线搜索安装包实现离线安装。

pcd格式如何解码python python pcap解析_后端_03

离线包我这里给大家一个百度网盘的连接,大家自行下载即可
链接:https://pan.baidu.com/s/1ytKIVSBXLMQhrXleC_I4dA 提取码:8scp

对于安装方式也有以下更新:

方法三-1:直接安装(full体积可能会比较大,但是比较简单,双击运行即可)

pcd格式如何解码python python pcap解析_python_04

 安装完之后,又遇到:error:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\\BIN\\x86_amd64\\cl.exe' failed with exit code 2

根据网上解决方法,下载windows 10 SDK并安装地址:Windows SDK - Windows app development

pcd格式如何解码python python pcap解析_Windows_05

需要注意的是,如果Python版本为3.7.2(其它大于3.7的版本没试过)有可能编译失败,因为有个头文件pystate.h在高版本会有更新,导致结构体_ts PyThreadState中的某些参数不识别,从而提示错误pcap.c(22849): error C2039: 'exc_value': is not a member of '_ts'等。

崩溃,,通过网络查看,可能是python版本的原因。

如果Python版本为3.7.2(其它大于3.7的版本没试过)有可能编译失败,因为有个头文件pystate.h在高版本会有更新,导致结构体_ts PyThreadState中的某些参数不识别,从而提示错误pcap.c(22849): error C2039: 'exc_value': is not a member of '_ts'等。之后我将版本换至3.6.6后便正常编译了。

安装完成后,可以进入python执行import pcap查看是否已经可以正常导入。

最后:

因为项目需求需要在windows下抓包,用python编程。所以就找相关的轮子。找到了三个:

1、pypcap(pip install pypcap)

2、libpcap(pip install libpcap)

3、pcap-ct(pip install pcap-ct)

那么,这三个有啥区别呢?其实从底层来说,都是基于C libpcap的python封装,无非是使用方便不方便的问题。

pypcap对C libpcap封装后,提供了pythonic的API接口;

而libpcap就比较简单粗暴了,根据官网说法:

libpcap is a lightweight Python package, based on the ctypes library.

It is fully compliant implementation of the original C libpcap from 1.0.0 up to 1.9.0 API and the WinPcap's 4.1.3 libpcap (1.0.0rel0b) API by implementing whole its functionality in a clean Python instead of C.

就是说即使是python的实现,也完全兼容WinPcap 4.1.3的API,比较复杂难用(不然我为啥用python???);

pcap-ct兼容pypcap的API,并且简化了安装并修复了BUG。

坑就是!!!:

在Win10上,我先安装了Npcap(win10要Npcap,WinPcap有兼容性问题),勾选了WinPcap兼容,下载Npcap-SDK和pypcap源码放在同一目录,然后再pypcap目录下 python setup.py install,源码编译安装pypcap(需要电脑安装visual studio 2015以上版本,有编译依赖)。结果安装完成后发现有bug,python程序可以发现网络接口,一抓包就闪退,还不报错。

然后安装libpcap,可以抓包,但接口实在太难用,就想有没有其他方法。

然后想着要不试一下pcap-ct,结果真香,直接pip安装就行,还没乱七八糟的依赖,我要给作者点赞!

pip install pcap-ct

pcd格式如何解码python python pcap解析_python_06

pcap-ct优于pcap库,而且不需要安装任何其他的东西。

 

PyPCAP 这是libpcap(当前tcpdump.org版本)和Windows的WinPcap端口的简化的面向对象的Python包装器。

使用示例:

>>> import pcap
>>> sniffer = pcap.pcap(name=None, promisc=True, immediate=True, timeout_ms=50)
>>> addr = lambda pkt, offset: '.'.join(str(ord(pkt[i])) for i in range(offset, offset + 4))
>>> for ts, pkt in sniffer:
...     print('%d\tSRC %-16s\tDST %-16s' % (ts, addr(pkt, sniffer.dloff + 12), addr(pkt, sniffer.dloff + 16)))
...

Windows笔记
WinPcap与Windows 10存在兼容性问题,因此建议使用Npcap (Nmap的Windows数据包嗅探库,基于WinPcap / Libpcap库,但具有提高的速度,可移植性,安全性和效率)。在库安装过程中,请启用WinPcap API兼容模式。

pcap 网络解析模块dpkt:

pcd格式如何解码python python pcap解析_pcd格式如何解码python_07