A-A+

win10 python3 pypcap 安装心得

2021年05月13日 22:02 学习笔记 暂无评论 阅读 151 views 次

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

win10 python3 安装pypcap 解决方案:

pip install pcap-ct

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兼容模式。

要求
这是一个完全独立的程序包。
在正常安装过程中会安装所有必需的东西。
注意:目前只能在Windows上运行并经过测试。

安装
先决条件:Python 3.6或更高版本

 

 

 

 

--------------------------------------------------------------------

------------------好了下面都是废话------------------

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

报错内容如下:

 

Collecting pypcap
  Using cached pypcap-1.2.3.tar.gz (136 kB)
    ERROR: Command errored out with exit status 1:
     command: 'd:\python\python39\python.exe' -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\lenovo\\AppData\\Local\\Temp\\pip-install-i15049wm\\pypcap_a58a9172ed154f8fa8f3454770e7ce9d\\setup.py'"'"'; __file__='"'"'C:\\Users\\lenovo\\AppData\\Local\\Temp\\pip-install-i15049wm\\pypcap_a58a9172ed154f8fa8f3454770e7ce9d\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\lenovo\AppData\Local\Temp\pip-pip-egg-info-qs80nm84'
         cwd: C:\Users\lenovo\AppData\Local\Temp\pip-install-i15049wm\pypcap_a58a9172ed154f8fa8f3454770e7ce9d\
    Complete output (1 lines):
    pcap.h not found
    ----------------------------------------
WARNING: Discarding https://files.pythonhosted.org/packages/12/71/a689ca8c6ef4570e105efdc6b46d4ac16cdef7af36a8fbfaff0f6fa2b754/pypcap-1.2.3.tar.gz#sha256=ad87fa22fe05f46b5dc602724958f1025af82ba3116694eddf5cb3035f3ab1f0 (from https://pypi.org/simple/pypcap/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

ERROR: Could not find a version that satisfies the requirement pypcap (from versions: 1.1, 1.1.1, 1.1.2, 1.1.3, 1.1.4, 1.1.4.1, 1.1.5, 1.1.6, 1.2.0, 1.2.1, 1.2.2, 1.2.3)
ERROR: No matching distribution found for pypcap

通过网络找到了如下解决方案,但是根本不可用:

请注意,使用pip或conda安装软件包时,作为一个很好的来源,否则它会非常慢。详细信息请参见链接集[4,5]。

Linux(物理主机或虚拟机)非常容易安装pypcap软件包,因此省略。Windows10系统安装在许多坑上,请按照此处的步骤进行具体说明。WinPcap和Win10的兼容性问题,建议使用替代的Npcap WinPcap。Python的pcap libpcap模块是Python的打包版本。Pcap下载安装模块需要安装三个组件。

)下载

Npcap https://nmap.org/npcap/

NpcapSDK https://nmap.org/npcap/

pypcap https://github.com/pynetwork/pypcap

 

)安装

)安装Npcap

打开安装程序。如果以前安装了winpcap,它将首先被自动卸载。

win10 python3 pypcap 安装心得

 

 

)安装pypcapNpcapSDK

1.将NpcapSDK文件夹放入pypcap相同级别的文件夹中,该文件夹名为wpdpack

win10 python3 pypcap 安装心得

转到pypcap所在的目录,执行python setup.py install

win10 python3 pypcap 安装心得

如果提示缺少Visual C ++ 14.0,则需要安装Visual Studio 2017,或者仅缺少开发工具。

 

在Windows上修复Python:

error Microsoft Visual C++ 14.0 is required

通过安装以下选项之一:

选择:工作负载→使用C ++进行桌面开发,然后对于单个组件,仅选择:

  • Windows 10 SDK
  • C ++ x64 / x86构建工具

生成工具允许从命令行使用MSVC“ cl.exe” C / C ++编译器。

 

(由于网络问题,缺少开发工具的安装需要在线下载,可能未下载。)

win10 python3 pypcap 安装心得

 

但是我又遇到了另一个错误,,,如下:

 

D:\Python\pypcap-master\npcap-sdk-1.07>python setup.py install
Found pcap headers in ..\wpdpack\include\pcap.h
Found libraries in ..\wpdpack\lib/x64\wpcap.lib
found pcap_get_tstamp_precision function
found pcap_setdirection
found pcap_setnonblock
found pcap_compile_nopcap function
running install
running bdist_egg
running egg_info
writing pypcap.egg-info\PKG-INFO
writing dependency_links to pypcap.egg-info\dependency_links.txt
writing top-level names to pypcap.egg-info\top_level.txt
reading manifest file 'pypcap.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pypcap.egg-info\SOURCES.txt'
installing library code to build\bdist.win-amd64\egg
running install_lib
running build_ext
building 'pcap' extension
creating build
creating build\temp.win-amd64-3.9
creating build\temp.win-amd64-3.9\Release
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29910\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -DHAVE_PCAP_TSTAMP_PRECISION=1 -DHAVE_PCAP_SETDIRECTION=1 -DHAVE_PCAP_SETNONBLOCK=1 -DHAVE_PCAP_COMPILE_NOPCAP=1 -I..\wpdpack\include -ID:\Python\Python39\include -ID:\Python\Python39\include -IC:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.28.29910\include -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt -IC:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\cppwinrt /Tcpcap.c /Fobuild\temp.win-amd64-3.9\Release\pcap.obj -DWIN32 -DWPCAP -D_CRT_SECURE_NO_WARNINGS
pcap.c
pcap.c(3065): warning C4996: 'PyObject_AsCharBuffer': deprecated in 3.0
pcap.c(22411): error C2039: "tp_print": 不是 "_typeobject" 的成员
D:\Python\Python39\include\cpython/object.h(193): note: 参见“_typeobject”的声明
pcap.c(22419): error C2039: "tp_print": 不是 "_typeobject" 的成员
D:\Python\Python39\include\cpython/object.h(193): note: 参见“_typeobject”的声明
pcap.c(22427): error C2039: "tp_print": 不是 "_typeobject" 的成员
D:\Python\Python39\include\cpython/object.h(193): note: 参见“_typeobject”的声明
pcap.c(22437): error C2039: "tp_print": 不是 "_typeobject" 的成员
D:\Python\Python39\include\cpython/object.h(193): note: 参见“_typeobject”的声明
pcap.c(22442): error C2039: "tp_print": 不是 "_typeobject" 的成员
D:\Python\Python39\include\cpython/object.h(193): note: 参见“_typeobject”的声明
pcap.c(22457): error C2039: "tp_print": 不是 "_typeobject" 的成员
D:\Python\Python39\include\cpython/object.h(193): note: 参见“_typeobject”的声明
pcap.c(22470): error C2039: "tp_print": 不是 "_typeobject" 的成员
D:\Python\Python39\include\cpython/object.h(193): note: 参见“_typeobject”的声明
pcap.c(24116): warning C4996: '_PyUnicode_get_wstr_length': deprecated in 3.3
pcap.c(24132): warning C4996: '_PyUnicode_get_wstr_length': deprecated in 3.3
pcap.c(25062): warning C4996: 'PyUnicode_FromUnicode': deprecated in 3.3
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\VC\\Tools\\MSVC\\14.28.29910\\bin\\HostX86\\x64\\cl.exe' failed with exit code 2

瞬间崩溃,,通过网络查看,可能是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安装就行,还没乱七八糟的依赖,我要给作者点赞!

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言