基于winpcap的嗅探器设计与实现_毕业设计(编辑修改稿)内容摘要:

le, amp。 header, amp。 pkt_data)) = 0) { if(res == 0) //超时 continue。 struct datapkt *data = (struct datapkt*)malloc(sizeof(struct datapkt))。 memset(data,0,sizeof(struct datapkt))。 if(NULL == data) { MessageBox(NULL,_T(空间已满,无法接收新的数据包),_T(Error),MB_OK)。 return 1。 } //分析出错或所接收数据包不在处理范围内 if(analyze_frame(pkt_data,data,amp。 (pthisnpacket))0) continue。 //将数据包保存到打开的文件中 if(pthisdumpfile!=NULL) { pcap_dump((unsigned char*)pthisdumpfile,header,pkt_data)。 } //更新各类数据包计数 pthissniffer_updateNPacket()。 //将本地化后的数据装入一个链表中,以便后来使用 ppkt_data = (u_char*)malloc(headerlen)。 memcpy(ppkt_data,pkt_data,headerlen)。 pthis(data)。 pthis(ppkt_data)。 /*预处理,获得时间、长度 */ datalen = headerlen。 //链路中收到的数据长度 local_tv_sec = header。 ltime = localtime(amp。 local_tv_sec)。 datatime[0] = ltimetm_year+1900。 datatime[1] = ltimetm_mon+1。 datatime[2] = ltimetm_mday。 datatime[3] = ltimetm_hour。 datatime[4] = ltimetm_min。 datatime[5] = ltimetm_sec。 /*为新接收到的数据包在 listControl中新建一个 item*/ (_T(%d),pthisnpkt)。 nItem = pthis(pthisnpkt,buf)。 /*显示时间戳 */ (_T(%d/%d/%d %d:%d:%d),datatime[0], datatime[1],datatime[2],datatime[3],datatime[4],datatime[5])。 pthis(nItem,1,timestr)。 /*显示长度 */ ()。 (_T(%d),datalen)。 pthis(nItem,2,buf)。 /*显示源 MAC*/ ()。 (_T(%02X%02X%02X%02X%02X%02X),dataethhsrc[0],dataethhsrc[1], dataethhsrc[2],dataethhsrc[3],dataethhsrc[4],dataethhsrc[5])。 pthis(nItem,3,buf)。 /*显示目的 MAC*/ ()。 (_T(%02X%02X%02X%02X%02X%02X),dataethhdest[0],dataethhdest[1], dataethhdest[2],dataethhdest[3],dataethhdest[4],dataethhdest[5])。 pthis(nItem,4,buf)。 /*获得协议 */ pthis(nItem,5,CString(datapktType))。 /*获得源 IP*/ ()。 if(0x0806== dataethhtype) { (_T(%d.%d.%d.%d),dataarphar_srcip[0], dataarphar_srcip[1],dataarphar_srcip[2],dataarphar_srcip[3])。 }else if(0x0800 == dataethhtype) { struct in_addr in。 = dataiphsaddr。 buf = CString(i_ntoa(in))。 }else if(0x86dd ==dataethhtype ){ int n。 for(n=0。 n8。 n++) { if(n=6) (_T(%02x:),dataiph6saddr[n])。 else (_T(%02x),dataiph6saddr[n])。 } } pthis(nItem,6,buf)。 /*获得目的 IP*/ ()。 if(0x0806 == dataethhtype) { (_T(%d.%d.%d.%d),dataarphar_destip[0], dataarphar_destip[1],dataarphar_destip[2],dataarphar_destip[3])。 }else if(0x0800 == dataethhtype){ struct in_addr in。 = dataiphdaddr。 buf = CString(i_ntoa(in))。 }else if(0x86dd ==dataethhtype ){ int n。 for(n=0。 n8。 n++) { if(n=6) (_T(%02x:),dataiph6daddr[n])。 else (_T(%02x),dataiph6daddr[n])。 } } pthis(nItem,7,buf)。 /*对包计数 */ pthisnpkt++。 } return 1。 } 数据解析函数 /*分析链路层 */ int analyze_frame(const u_char * pkt,struct datapkt * data,struct pktcount *npacket) { int i。 struct ethhdr *ethh = (struct ethhdr*)pkt。 dataethh = (struct ethhdr*)malloc(sizeof(struct ethhdr))。 if(NULL == dataethh) return 1。 for(i=0。 i6。 i++) { dataethhdest[i] = ethhdest[i]。 dataethhsrc[i] = ethhsrc[i]。 } npacketn_sum++。 dataethhtype = ntohs(ethhtype)。 //处理 ARP还是 IP包。 switch(datae。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。