WinPcap开发心得

什么是WinPcap?

       随着网络应用的普及,对于网络状况进行分析和监控的需求原来越多。在这些需求中,有些需要在网络上进行抓包分析的需要,Unix/LinuxlibPcap就是支持基于网卡的抓包,发包的Toolkit,它在Windows下的实现就是WinPcap

 

WinPcap的主页:

http://www.winpcap.org/

 

WinPcap的授权:

免费使用,无开放源码的限制。

 

中文开发手册地址:

http://www.coffeecat.net.cn/winpcap/html/index.html

 

开发工具:

尽量使用比较新的开发环境,VS2003或者2005都可以,VC6不支持其中部分特性(没有尝试过安装SDK是否可行)。

 

WinPcap面对的消息包:

基于WinPcap的编程,不同于以往的Socket编程。对于Socket来说,开发者面对的是应用层,所有之下的协议都是由Socket来进行屏蔽;WinPcap来说,开发者需要面对除去物理层外,所有网络层次的协议。以以太网为例,用户需要从收发的消息包,从链路层开始。

 

什么时候需要用到WinPcap

       当遇到一些情况,Socket失去效用时,需要用到WinPcap。举例说明,当交换机进行端口镜像时,所有被镜像出来的包发往另外一个端口。此时出现IP和消息包不对应的情况,此时无法建立Socket进行收包,WinPcap是一个好的选择。

 

WinPcap基本功能:

获取网卡设备列表、捕获数据包、过滤数据包、分析数据包、发送数据包、收集并统计网络流量。

 

链路层开发注意事项:

       通常,链路层协议的字段较少。在发送数据包的时候,需要注意,填写目的MAC地址时,当该MAC地址在交换机上已知,可以直接填写MAC地址;若未知,需要填写网关的MAC

 

IP层开发的注意事项

       当修改IP层数据的时候需要同时修改IP层的校验和。IP层的校验和是必选参数,如果协议发送的途径中,有用到IP层的话,需要保证该校验和无误。IP层校验和的计算单位为整个IP层首部20个字节,校验和本身在计算过程中置0

算法如下:

u_short Checksum(u_short *buffer, int size)

{

     unsigned long cksum=0;

 

     while(size >1)

     {

     cksum+=*buffer++;

     size -=sizeof(u_short);

     }

     if(size)

     cksum += *(u_char*)buffer;

     cksum = (cksum >> 16) + (cksum & 0xffff);

     cksum += (cksum >>16);

     return (u_short)(~cksum);

}

 

传输层开发的注意事项:

传输层开发也存在校验和的问题,算法和IP层一样,不同的是计算的单位不同。例如UDP的校验和的组成包含伪头部+UDP头部+UDP数据,当UDP数据为奇数时,后面需要补上一个内容为0的字节。伪头部的组成为4个字节源IP地址+4个字节目的IP地址+1个字节0+1个字节传输层协议类型(0x11+2个字节UDP长度(和UDP头部保持一致),共12个字节。

 

发包注意事项:

       当发包的Host和收包的Host在同一台交换机上时,只要填对MAC地址,对方才能收到。当发包的Host和收包的Host不在同一台交换机上时,需要修改目的IP地址和校验和,并将消息发向网关。

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值