win10 python3 pypcap 安装心得

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是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下载安装模块需要安装三个组件。
1 )下载
Npcap https://nmap.org/npcap/
NpcapSDK https://nmap.org/npcap/
pypcap https://github.com/pynetwork/pypcap
2 )安装
(1 )安装Npcap
打开安装程序。如果以前安装了winpcap,它将首先被自动卸载。
(2 )安装pypcap和NpcapSDK
1.将NpcapSDK文件夹放入pypcap相同级别的文件夹中,该文件夹名为wpdpack
转到pypcap所在的目录,执行python setup.py install
如果提示缺少Visual C ++ 14.0,则需要安装Visual Studio 2017,或者仅缺少开发工具。
在Windows上修复Python:
error Microsoft Visual C++ 14.0 is required
通过安装以下选项之一:
- 用于Visual Studio的Microsoft构建工具。
- 指向Visual Studio的Microsoft构建工具的替代链接。
- 脱机安装程序:vs_buildtools.exe
选择:工作负载→使用C ++进行桌面开发,然后对于单个组件,仅选择:
- Windows 10 SDK
- C ++ x64 / x86构建工具
生成工具允许从命令行使用MSVC“ cl.exe” C / C ++编译器。
(由于网络问题,缺少开发工具的安装需要在线下载,可能未下载。)
但是我又遇到了另一个错误,,,如下:
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安装就行,还没乱七八糟的依赖,我要给作者点赞!
请问下楼主能提供下python、pcap-ct、npcap版本号么, 我这边用的python3.7.8、pcap-ct 1.2.3b6 npcap1.5.0、npcap-sdk1.10、pypcap 1.2.3. 用pypcap时候也运行闪退,用pcap-ct时候报错\”No package metadata was found for pcap\”
你把之前安装的pcap包都卸载掉,仅用下面的这个。 python最新3.9的,npcap还有pcap-ct都是最新的。pip install pcap-ct
感谢楼主,不过全卸载重装后还是报错\”No package metadata was found for pcap\”, 最后把site-packages下面的pcap_ct-1.2.3b6.dist-info文件夹复制重命名了一份为pcap-1.2.3b6.dist-info后就能运行了