转自: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学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. 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 ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

  10. NuGet学习笔记(3) 搭建属于自己的NuGet服务器

    文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...

最新文章

  1. dnsmasq搭建简易DNS服务器
  2. PHP变参函数的实现
  3. 创业?你还差一位合格的产品经理
  4. 打开另外一个页面_如何在PDF页面中插入图片?
  5. dh算法 理论依据_DH算法原理
  6. centos mysql开发包_CentOS 7 安装 MySQL-阿里云开发者社区
  7. [转]vs2010 MSDN文档安装方法
  8. Excel 2007中的新文件格式
  9. python正则库安装_python中正则表达式regex库的使用
  10. 【C语言】16-预处理指令2-条件编译
  11. Windows进行远程桌面连接后如何彻底删除远程记录
  12. 手机端html5页面横屏显示,移动端HTML5中判断横屏竖屏的方法
  13. related_name/related_query_name的区别
  14. web前端开发--------CSS基础教程
  15. 最新小程序反编译的获取流程
  16. 计算机如何增加c盘容量,怎么给c盘增加空间 c盘增加空间步骤【图文】
  17. 基于React全家桶开发「网易云音乐PC」项目实战(三)
  18. 51Nod 1677 treecnt
  19. 学生成绩排名 (用结构体数组按成绩排名)
  20. 在天堂与地狱之间——清华浪子梦断中关村 (转)

热门文章

  1. maven打包时把依赖的jar包打进去
  2. MOSS 2010 无法同步用户配置文件
  3. 反击ARP欺骗 我和网络执法官的战斗
  4. 性能分析工具Linux perf使用经验
  5. 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
  6. Centos中yum方式安装java
  7. php面试题 mysql 主从_php面试题之五——MySQL数据库(基础部分)
  8. 3.2配置自定义的路径映射
  9. 使用freemarker模板生成html文件(二)
  10. 【渝粤教育】国家开放大学2018年春季 3924T★汽车电器设备构造与检修 参考试题