使用Python和C#进行IP包抓取实践

本文介绍了如何使用Python的pypcap和scapy库进行IP数据包抓取,以及在C#中调用Python程序进行IP包抓取的实践。在Python环境中,由于pypcap安装问题,最终选择了scapy进行IP包捕获和解析。在C#中,尝试通过IronPython调用Python脚本,但由于依赖问题未成功,提出了使用C#的Socket类直接实现IP包抓取的可能性。
摘要由CSDN通过智能技术生成

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',</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值