VC++基于winpcap实现数据包分析

本文介绍了Winpcap在Windows平台上的作用,它是一个免费的网络访问系统,用于网络封包抓取和分析。Winpcap适用于网络分析、监控等领域,但不支持阻塞或处理主机间的通信数据。文章还提到了Winpcap的内部结构和典型应用场景,并提及了相关网络监控软件。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               



winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
WinPcap是用于网络封包抓取的一套工具,可适用于32位的操作平台上解析网络封包,包含了核心的封包过滤,一个底层动态链接库,和一个高层系统函数库,及可用来直接存取封包的应用程序界面。
  Winpcap是一个免费公开的软件系统。它用于windows系统下的直接的网络编程。
  大多数网络应用程序访问网络是通过广泛使用的套接字。这种方法很容易实现网络数据传输,因为操作系统负责底层的细节(比如协议栈,数据流组装等)以及提供了类似于文件读写的函数接口。
  但是有时,简单的方法是不够的。因为一些应用程序需要一个底层环境去直接操纵网络通信。因此需要一个不需要协议栈支持的原始的访问网络的方法。 
  Winpcap提供了一个强大的编程接口,它很容易地在各个操作系统之间进行移植,也很方便程序员进行开发。
  什么样的程序需要使用Winpcap
  很多不同的工具软件使用Winpcap于网络分析,故障排除,网络安全监控等方面。Winpcap特别适用于下面这几个经典领域:
  1、网络及协议分析
  2、网络监控
  3、通信日志记录
  4、traffic generators
  5、用户级别的桥路和路由
  6、网络入侵检测系统(NIDS)
  7、网络扫描
  8、安全工具
  Winpcap有些方面不能做。它不依靠主机的诸如TCP/IP协议去收发数据包。这意味着它不能阻塞,不能处理同一台主机中各程序之间的通信数据。它只能“嗅探”到物理线路上的数据报。因此它不适用于traffic shapers,QoS调度,以及个人防火墙。
  Winpcap内部结构
  Winpcap是一个Win32平台下用于抓包和分析的系统。包括一个内核级别的packet filter,一个底层的DLL(packet.dll)和一个高级的独立于系统的DLL(Wpcap.dll)
 winpcap的主要功能在于独立于主机协议(如TCP-IP)而发送和接收原始数据包。也就是说,winpcap不能阻塞,过滤或控制其他应用程序数据包的发收,它仅仅只是监听共享网络上传送的数据包。因此,它不能用于QoS调度程序或个人防火墙。目前,winpcap开发的主要对象是windows NT/2000/XP,这主要是因为在使用winpcap的用户中只有一小部分是仅使用windows 95/98/Me,并且MS也已经放弃了对win9x的开发。因此本文相关的程序T-ARP也是面向NT/2000/XP用户的。其实winpcap中的面向9x系统的概念和NT系统的非常相似,只是在某些实现上有点差异,比如说9x只支持ANSI编码,而NT系统则提倡使用Unicode编码。有个软件叫sniffer pro.可以作网管软件用,有很多功能,可监视网络运行情况,每台网内机器的数据流量,实时反映每台机器所访问IP以及它们之间的数据流通情况,可以抓包,可对过滤器进行设置,以便只抓取想要的包,比如POP3包,smtp包,ftp包等,并可从中找到邮箱用户名和密码,还有ftp用户名和密码。它还可以在使用交换机的网络上监听,不过要在交换机上装它的一个软件。还有一个简单的监听软件叫Passwordsniffer,可截获邮箱用户名和密码,还有ftp用户名和密码,它只能用在HUB网络上。著名软件tcpdump及ids snort都是基于libpcap编写的,此外Nmap扫描器也是基于libpcap来捕获目标主机返回的数据包的。
  winpcap提供给用户两个不同级别的编程接口:一个基于libpcap的wpcap.dll,另一个是较底层的packet.dll。对于一般的要与unix平台上libpcap兼容的开发来说,使用wpcap.dll是当然的选择。



#include "pcap.h"   /*  -----------------------------------------------------------------------------------------------------------------------  WinPcap头文件 ;  以下是以太网协议格式的定义  -----------------------------------------------------------------------------------------------------------------------   */   struct ether_header   {
           u_int8_t ether_dhost[6];       /* 目的以太网地址 */       u_int8_t ether_shost[6];       /* 源以太网地址 */       u_int16_t ether_type;       /* 以太网类型 */   };   /*  -----------------------------------------------------------------------------------------------------------------------  下面是ARP协议格式的定义  -----------------------------------------------------------------------------------------------------------------------   */   struct arp_header   {
           u_int16_t arp_hardware_type;       /* 硬件类型 */       u_int16_t arp_protocol_type;       /* 协议类型 */       u_int8_t arp_hardware_length;       /* 硬件地址长度 */       u_int8_t arp_protocol_length;       /* 协议地址长度 */       u_int16_t arp_operation_code;       /* 操作码 */       u_int8_t arp_source_ethernet_address[6];       /* 源以太网地址 */       u_int8_t arp_source_ip_address[4];       /* 源IP地址 */       u_int8_t arp_destination_ethernet_address[6];       /* 目的以太网地址 */       u_int8_t arp_destination_ip_address[4];       /* 目的IP地址 */   };   /*  -----------------------------------------------------------------------------------------------------------------------  下面是IP协议格式的定义  -----------------------------------------------------------------------------------------------------------------------   */   struct ip_header   {
           #if defined(WORDS_BIGENDIAN)           u_int8_t ip_version: 4,           /* 版本 */           ip_header_length: 4;           /* 首部长度 */       #else           u_int8_t ip_header_length: 4, ip_version: 4;       #endif       u_int8_t ip_tos;       /* 服务质量 */       u_int16_t ip_length;       /* 长度 */       u_int16_t ip_id;       /* 标识 */       u_int16_t ip_off;       /* 偏移 */       u_int8_t ip_ttl;       /* 生存时间 */       u_int8_t ip_protocol;       /* 协议类型 */       u_int16_t ip_checksum;       /* 校验和 */       struct in_addr ip_souce_address;       /* 源IP地址 */       struct in_addr ip_destination_address;       /* 目的IP地址 */   };   /*  -----------------------------------------------------------------------------------------------------------------------  下面是UDP协议格式定义  -----------------------------------------------------------------------------------------------------------------------   */   struct udp_header   {
           u_int16_t udp_source_port;       /* 源端口号 */       u_int16_t udp_destination_port;       /* 目的端口号 */       u_int16_t udp_length;       /* 长度 */       u_int16_t udp_checksum;       /* 校验和 */   };   /*  -----------------------------------------------------------------------------------------------------------------------  下面是TCP协议格式的定义  -----------------------------------------------------------------------------------------------------------------------   */   struct tcp_header   {
           u_int16_t tcp_source_port;       /* 源端口号 */       u_int16_t tcp_destination_port;       /* 目的端口号 */       u_int32_t tcp_sequence_lliiuuwweennttaaoo;       /* 序列号 */       u_int32_t tcp_acknowledgement;       /* 确认序列号 */       #ifdef WORDS_BIGENDIAN           u_int8_t tcp_offset: 4,           /* 偏移 */           tcp_reserved: 4;           /* 未用 */       #else           u_int8_t tcp_reserved: 4,           /* 未用 */           tcp_offset: 4;           /* 偏移 */       #endif       u_int8_t tcp_flags;       /* 标记 */       u_int16_t tcp_windows;       /* 窗口大小 */    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值