上海电力学院
计算机网络安全(1)
课程实验报告
实验名称: winpcap编程实验
基于Winpcap 编程实现抓包实验
一. 本设计要达到的目标
基于winpcap编程实现对网络数据的捕获,并分析数据类型,对于IP,ICMP,ARP,UDP等,能够自动识别其协议类型并分析帧的构成。
二.实现步骤
(1)需要通过资料来了解winpcap抓包的工作原理,熟悉其运行过程
Winpcap的内部结构
Wincap有三部分组成:一个数据包监听设备驱动程序,一个低级的动态连接库和一个高级的静态连接库。底层动态链接库运行在用户层,它将应用程序和数据包监听设备驱动程序隔离开来,使得应用程序可以不加修改地在不同的WINDOWS系统上运行。高级的静态链接库和应用程序编译在一起,它使用低级动态链接库提供的服务,向应用程序提供完善的监听接口。抓包是WinPcap的基本功能,也是NPF最重要的操作。在抓包的时候,驱动(例如NIC Driver)使用一个网络接口监视着数据包,并将这些数据包完整无缺地投递给用户级应用程序。
(2)进一步了解winpcap编程所需要的编译环境,下载WpdPack,了解编译环境所需要的库文件.在编译时需要把wpdpack中的include与lib添加进vc的库文件里。
(3)明确整个编程的步骤与具体函数。刚开始要定义,在主函数中获取设备接口信息,获得网络地址与掩码地址,打开网络接口,还要设置过滤规则。使用loop函数来回调循环捕获数据包,以便一层一层解析。
(4)还要定义几个以太网,ARP,IP,UDP,TCP,ICMP协议的格式。需要注意在存储空间中,在存储空间中才能更好的逐层分析,不然很容易出错
(5)定义分析协议的函数,定义方式与回调函数相同.常用的函数有:用于获取本机设备列表的pcap_findalldevs_ex函数
用于打开设备的pcap_open函数,可以指定为混杂模式打开 用于编译数据包过滤器的pcap_compile 函数
用于设置数据包过滤器的pcap_setfilter 函数 用于从设备读取数据包的pcap_netx_ex 函数
用于关闭设备的pcap_close 函数(参数为pcap_open 返回值)
用于释放设备列表的pcap_freealldevs 函数(对应pcap_findalldevs_ex)
三.系统流程图
主函数 分析ARP协议函数 以太网协议分析函数 分析Ip协议函数 判断下层函数 分析ICMP协议函数 分析TCP协议函数 分析UDP协议函数 16进制数据
四.关键代码及其分析
主函数
void main() {
pcap_t *pcap_handle; /* Winpcap句柄 */ char error_content[PCAP_ERRBUF_SIZE]; /* 存储错误信息 */ char *net_interface; /* 网络接口 */ bpf_program bpf_filter; /* BPF过滤规则 */
char bpf_filter_string[] = \过滤规则字符串 */ bpf_u_int32 net_mask; /* 掩码 */ bpf_u_int32 net_ip; /* 网路地址 */
net_interface = pcap_lookupdev(error_content); /* 获得可用的网络接口 */ pcap_lookupnet(net_interface, &net_ip, &net_mask, error_content);/* 获得网络地址和掩码地址 */
pcap_handle = pcap_open_live(net_interface, BUFSIZ, 1, 1, error_content); /* 打开网路接口 */
pcap_compile(pcap_handle, &bpf_filter, bpf_filter_string, 0, net_ip); /* 编译BPF过滤规则 */
pcap_setfilter(pcap_handle, &bpf_filter); /* 设置过滤规则 */
对IP协议的定义
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于Winpcap 编程实现抓包实验在线全文阅读。
相关推荐: