SharpPcap学习笔记
转自:http://blog.csdn.net/lastsweetop/archive/2009/06/12/4264608.aspx
在做飞信的时候看到nathan2007写的FeitionSniffer(一个用BC++和WinPcap开发的小工具,小巧却很实用),不禁暗暗想自己也能做个类似的东西,以后分析起协议就方便了.上网搜索了一下,发现有人已经用C#把WinPcap的功能进行了封装,开发了SharpPcap.然后看了SharpPcap tutorial,感觉还是挺简单的.顺便做个笔记以后用起来就方便了.
1. 获得网络设备
由于一个系统的网络设备可能不止一个,因而使用了一个列表类来保存所有的设备,这里使用了一个静态方法进行操作
/* Retrieve the device list */
PcapDeviceList devices = SharpPcap.GetAllDevices();
获取列表后,就能对设备进行操作了,其实设备分为2个子类,一类是NetworkDevice,这个是算是真实的网络设备吧,还有一类是PcapOfflineDevice,这个类是通过读取抓包文件生成的虚拟设备.
如果是NetworkDevice,那么还有些其他的网络信息,如ip地址,子网掩码等.
2. 抓包过程
在选定了一个PcapDevice后,就能使用他的方法进行抓包了.首先要打开设备.
//Open the device for capturing
//true -- means promiscuous mode
//1000 -- means a read wait of 1000ms
device.PcapOpen(true, 1000);
方法提供2个参数,第一个为抓包模式,指明是否抓其他Ip地址的包,类似Hub的功能;第二个是指超时时间,毫秒级.
下面就能正式抓包了,一共提供了3种方法:
device.PcapStartCapture();
异步方式,调用之后立即返回,具体抓下来的包,由PcapOnPacketArrival事件处理.需要停止的时候调用device.PcapStopCapture()进行关闭.
device.PcapCapture(int packetCount);
半同步方式,调用后,直到抓到packetCount数量的包才返回., 具体抓下来的包,由PcapOnPacketArrival事件处理.
注意:如果传入SharpPcap.INFINITE将不退出,永远都在接收,且程序就停在这个语句了.
packet=device.PcapGetNextPacket()
同步方式,调用后直接等待收到的下一个包,并获得该包.
注意:如果超时,就可能还没有获得包体就退出该过程.这时packet=null,所以使用该方法每次都要对包进行检测.
最后一定要记得,关闭设备.
device.Close();
3. 包体分析.
在捕捉到包后,就需要根据实际的包进行转换了.
if(packet is TCPPacket)
{
TCPPacket tcp = (TCPPacket)packet;
}
因为这个需要转换的包类型很多,具体都在Tamir.IPLib.Packets里面.按照说明,一直尝试转换是不对的了,需要与过滤机制配合使用,只对自己有用的包分析
4. 过滤机制
包过滤是抓包程序的必备机制,要想对某次捕捉进行过滤,就必须在设备打开后,开始抓包前设置设备的过滤参数.
//tcpdump filter to capture only TCP/IP packets
string filter = "ip and tcp";
//Associate the filter with this capture
device.PcapSetFilter( filter );
注意的是,filter是一个文本,遵循了tcpdump syntax.
5. 其他
A. SharpPcap还能保存捕获的包,而且使用起来也很简单.
保存: 在抓包前设置Dump的文件
//Open or create a capture output file
device.PcapDumpOpen( capFile);
抓到包后,把需要的包保存起来
//dump the packet to the file
device.PcapDump( packet );
使用:把包文件当作一个脱机设备
//Get an offline file pcap device
device = SharpPcap.GetPcapOfflineDevice( capFile );
然后这个设备也可以捕捉包,使用起来和真实的一样(当然,不会有超时了就是)
B.对设备直接发包
相对与捕捉包,也可以发送包.提供了2种方法
//Send the packet out the network device,直接发送包
device.PcapSendPacket( bytes );
//使用设备的发送队列
device.PcapSendQueue(squeue, true );
两种显然上面的容易,下面的高效
C.网络流量统计—没看,我暂时也不想用.
6.总结
主要来说PcapDevice类是整个操作的核心,把它用好了就成.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lastsweetop/archive/2009/06/12/4264608.aspx
转载于:https://www.cnblogs.com/armyao/archive/2010/11/05/1870165.html
SharpPcap学习笔记相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
- NuGet学习笔记(3) 搭建属于自己的NuGet服务器
文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...
最新文章
- dnsmasq搭建简易DNS服务器
- PHP变参函数的实现
- 创业?你还差一位合格的产品经理
- 打开另外一个页面_如何在PDF页面中插入图片?
- dh算法 理论依据_DH算法原理
- centos mysql开发包_CentOS 7 安装 MySQL-阿里云开发者社区
- [转]vs2010 MSDN文档安装方法
- Excel 2007中的新文件格式
- python正则库安装_python中正则表达式regex库的使用
- 【C语言】16-预处理指令2-条件编译
- Windows进行远程桌面连接后如何彻底删除远程记录
- 手机端html5页面横屏显示,移动端HTML5中判断横屏竖屏的方法
- related_name/related_query_name的区别
- web前端开发--------CSS基础教程
- 最新小程序反编译的获取流程
- 计算机如何增加c盘容量,怎么给c盘增加空间 c盘增加空间步骤【图文】
- 基于React全家桶开发「网易云音乐PC」项目实战(三)
- 51Nod 1677 treecnt
- 学生成绩排名 (用结构体数组按成绩排名)
- 在天堂与地狱之间——清华浪子梦断中关村 (转)