IP包抓取实践
Python
安装pypcap库
在python中,可以使用pypcap配合dpkt来进行IP数据包的抓取与解析,但是pypcap是5年前的模块,我是用的环境是Anaconda,Python版本是3.6.4,所以直接安装并安装不了。
所以我使用anaconda使用以下命令创建了一个Python版本是2.7的虚拟环境
conda create -n pcap python=2.7
然后使用以下准备使用以下代码来安装pypcap,发现也安装不了
pip install pypcap
报错pcap.h not found
参考这篇博客(https://blog.csdn.net/bestboyxie/article/details/53406626)的操作:需要先去 (http://www.winpcap.org/archive/)或者(https://www.winpcap.org/devel.htm) 下载sdk开发包,解压后得到文件夹WpdPack,将文件夹里的include文件夹和Lib文件夹分别放到python的安装目录下的include目录和Lib目录下,就没有这个报错了
后面应该还有一个报错:error: Microsoft Visual C++ 9.0 is required (Unable to find vcvarsall.bat)
可以按照提示,到 http://aka.ms/vcpython27 下载 VCForPython27,下载python的C拓展包编译器并安装,也可以解决这个报错。
但是我安装了Visual Studio 2017的C++运行库,所以这个报错并没有发生。
但是同时报了以下这个错
‘C:\Users\Administrator\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe’ failed with exit status 1120,
于是网上查到解决方案,安装1.1.6版本的pypcap(最新版为1.2.2),下载文件到本地,在该文件的目录下打开cmd,输入python setup.py install
安装成功
但是在import pcap
的时候仍然有错,显示为找不到该模块,于是下载WinPcap_4_1_3.exe
安装后解决。
但是最后发现里面的函数并不能使用,遂放弃。
安装scapy库
由于scapy也要在python2.7的环境下运行,所以继续使用虚拟环境。
pip install pyreadline #安装附加包
在官网下载scapy安装包,解压之后在该目录进入cmd,执行python setup.py install
安装完成。
开始学习捕获IP数据包函数
由于在中国scapy的官方文档网站老是打不开,所以现在只能参考国内的博客。
本次要使用的抓包函数主要是sniff
,其函数的主要参数为
sniff(filter=filterstr,prn=pack_callback,iface=ifacestr,count=0)
-
filter是一个字符串,用于过滤想要监听的数据包
-
prn是回调函数,每次抓取到数据包都会执行一次该函数
-
iface是网卡名字
-
count是抓包的数量,为0表示一直监听
开始实验
首先进入虚拟环境activate pcap
导入需要的包
from scapy.all import *
from scapy.utils import PcapWriter,PcapReader
定义一个回调函数
pktdump = PcapWriter('logfile.pcap',append=True) #写入日志文件
def packetHandler1(pkt):
try:
a = pkt[IP] #提取IP数据包的信息,一般有Ethernet、IP、TCP几个阶段
a.show() #把IP数据包的信息提取出来
pktdump.write(a) #写入日志文件
except:
pass
进行监听抓包
sniff(filter='not ARP',</