- 1、本文档共55页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编写自己的网络嗅探器
编译并运行测试代码 测试代码:/docs/docs_412/html/group__wpcapsamps.html(使用Packet Dump代码) 请根据你所建的工程类型修改这段代码 如果建的是MFC Application,那么请修改printf等函数 如果建的是Console Application,那么可以不用修改 * 编译并运行测试代码(续) 在Console Application下,运行结果如图所示,这说明环境已经配置成功。 * 四、用WinPcap捕获数据包 * 用WinPcap捕获数据包的流程 打开网络接口 设置过滤器 捕获网络数据包 释放该设备列表 用WinPcap捕获数据包的流程 * pcap_freealldevs 打开网络接口 * pcap_t* pcap_open_live( const char *?device, int?snaplen, int?promisc, int?to_ms, char *?ebuf }; 设置过滤器 int pcap_setfilter( pcap_t *p, struct bpf_program *fp ) * int pcap_compile( pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask ) 捕获网络数据包 * int pcap_next_ex( pcap_t* p, struct pcap_pkthdr ** pkt_header, u_char ** pkt_data }; 释放该设备列表 * void pcap_freealldevs(pcap_if_t *alldevsp); 五、分析数据包 * TCP/IP分层体系结构 以太网中数据包的封装 以太网帧格式 IP数据报格式 TCP数据报格式 字节顺序 以太网帧和IP数据报的结构定义 例:提取源IP地址和目的IP地址 TCP/IP分层体系结构 * 以太网中数据包的封装 * Wireshark对数据包各层协议的分析: 以太网帧格式 目的地址:目的MAC地址 6Byte 源地址:源MAC地址 6Byte 类型:表示上层协议类型 2Byte 0800H:IP 0806H:ARP 8035H:RARP 数据字段:用于携带上层数据 长度可变 CRC:帧校验字段 4Byte * 以太网帧格式 以下是Wireshark对数据包以太帧头的分析: * IP数据报格式 * 1:ICMP; 6:TCP;17:UDP IP数据报格式 以下是Wireshark对数据包的IP数据报头的分析: * TCP数据报格式 * TCP数据报格式 以下是Wireshark对数据包的TCP数据报头的分析: * 以太网帧和IP数据报的结构定义 * typedef struct FrameHeader_t { // 帧首部 BYTE DesMAC[6]; // 目的地址 BYTE SrcMAC[6]; // 源地址 WORD FrameType; // 帧类型 } FrameHeader_t; typedef struct IPHeader_t { // IP首部 BYTE Ver_HLen; BYTE TOS; WORD TotalLen; WORD ID; WORD Flag_Segment; BYTE TTL; BYTE Protocol; WORD Checksum; ULONG SrcIP; ULONG DstIP; } IPHeader_t; typedef struct Data_t { //包含帧首部和IP首部的数据包 FrameHeader_t FrameHeader; IPHeader_t IPHeader; } Data_t; 六、实验过程中可能遇到的问题 多线程 给窗口发送消息 数据包分片重组 嗅探到网页时,汉字的显示问题 字节顺序 网络序→主机序 u_short ntohs(u_short netshort) u_long ntohl(u_long netlong) 主机序→网络序 u_short htons(u_short hostshort) u_long htonl(u_long ho
文档评论(0)