- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、过滤数据包
一、过滤数据包
#include “pcap.h”#include “remote-ext.h”#pragma comment(lib, “wpcap.lib”)#pragma comment(lib,”ws2_32.lib”)
/* 4字节的IP地址 */typedef struct ip_address{u_char byte1;u_char byte2;u_char byte3;u_char byte4;}ip_address;
/* IPv4 首部 */typedef struct ip_header{u_char ver_ihl; // 版本 (4 bits) + 首部长度 (4 bits)u_char tos; // 服务类型(Type of service)u_short tlen; // 总长(Total length)u_short identification; // 标识(Identification)u_short flags_fo; // 标志位(Flags) (3 bits) + 段偏移量(Fragment offset) (13 bits)u_char ttl; // 存活时间(Time to live)u_char proto; // 协议(Protocol)u_short crc; // 首部校验和(Header checksum)ip_address saddr; // 源地址(Source address)ip_address daddr; // 目的地址(Destination address)u_int op_pad; // 选项与填充(Option + Padding)}ip_header;
/* UDP 首部*/typedef struct udp_header{u_short sport; // 源端口(Source port)u_short dport; // 目的端口(Destination port)u_short len; // UDP数据包长度(Datagram length)u_short crc; // 校验和(Checksum)}udp_header;
/* 回调函数原型 */void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);main(){pcap_if_t *alldevs;pcap_if_t *d;int inum;int i=0;pcap_t *adhandle;char errbuf[PCAP_ERRBUF_SIZE];u_int netmask;char packet_filter[] = “ip and udp”;struct bpf_program fcode;
/* 获得设备列表 */if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, alldevs, errbuf) == -1){fprintf(stderr,”Error in pcap_findalldevs: %s\n”, errbuf);exit(1);}
/* 打印列表 */for(d=alldevs; d; d=d-next){printf(“%d. %s”, ++i, d-name);if (d-description)printf(” (%s)\n”, d-description);elseprintf(” (No description available)\n”);}
if(i==0){printf(“\nNo interfaces found! Make sure WinPcap is installed.\n”);return -1;}
printf(“Enter the interface number (1-%d):”,i);scanf(“%d”, inum);
if(inum 1 || inum i){printf(“\nInterface number out of range.\n”);/* 释放设备列表 */pcap_freealldevs(alldevs);return -1;}
/* 跳转到已选设备 */for(d=alldevs, i=0; i inum-1 ;d=d-next, i++);
/* 打开适配器 */if ( (adhandle= pcap_open(d-name, // 设备名65536, // 要捕捉的数据包的部分//
文档评论(0)