网络嗅探器的编程仿真.doc

上传人:文库蛋蛋多 文档编号:2388623 上传时间:2023-02-17 格式:DOC 页数:4 大小:49.50KB
返回 下载 相关 举报
网络嗅探器的编程仿真.doc_第1页
第1页 / 共4页
网络嗅探器的编程仿真.doc_第2页
第2页 / 共4页
网络嗅探器的编程仿真.doc_第3页
第3页 / 共4页
网络嗅探器的编程仿真.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《网络嗅探器的编程仿真.doc》由会员分享,可在线阅读,更多相关《网络嗅探器的编程仿真.doc(4页珍藏版)》请在三一办公上搜索。

1、集美大学计算机工程学院实验报告课程名称:TCP/IP协议与通信程序设计班级:实验成绩:实验项目名称:网络嗅探器的编程仿真学号:上机实践日期:2016-06-14实验项目编号:12组号:1上机实践时间: 2学时一、 实验目的了解利用原始套接字进行通信程序的编写,编译和执行。二、 实验内容与设计思想利用原始套接字编程将网卡设置为混杂模式,对网络上传输的数据包进行捕获与分析,要求析出并显示数据包的发送端IP地址以及接收端的IP地址。三、 实验使用环境操作系统: Microsoft Windows XP SP2编程环境: Visual C+ 6.0四、实验步骤和调试过程源代码:#include ini

2、tsock.h#include protoinfo.h #include #include mstcpip.h#pragma comment(lib, Advapi32.lib)CInitSock theSock;/解析tcp数据void DecodeTCPPacket(char *pData)TCPHeader *pTCPHdr = (TCPHeader *)pData;printf( Port: %d - %d n, ntohs(pTCPHdr-sourcePort), ntohs(pTCPHdr-destinationPort);/ 下面还可以根据目的端口号进一步解析应用层协议switc

3、h(:ntohs(pTCPHdr-destinationPort)case 21:break;case 80:case 8080:break;/解析ip数据void DecodeIPPacket(char *pData)IPHeader *pIPHdr = (IPHeader*)pData;in_addr source, dest;char szSourceIp32, szDestIp32; printf(nn-n);/ 从IP头中取出源IP地址和目的IP地址source.S_un.S_addr = pIPHdr-ipSource;dest.S_un.S_addr = pIPHdr-ipDes

4、tination;strcpy(szSourceIp, :inet_ntoa(source);strcpy(szDestIp, :inet_ntoa(dest);printf(%s - %s n, szSourceIp, szDestIp);/ IP头长度int nHeaderLen = (pIPHdr-iphVerLen & 0xf) * sizeof(ULONG);switch(pIPHdr-ipProtocol)case IPPROTO_TCP: / TCP协议DecodeTCPPacket(pData + nHeaderLen);break;case IPPROTO_UDP:break

5、;case IPPROTO_ICMP:break; void main()/ 创建原始套节字SOCKET sRaw = socket(AF_INET, SOCK_RAW, IPPROTO_IP);/ 获取本地IP地址char szHostName56;SOCKADDR_IN addr_in;struct hostent *pHost;gethostname(szHostName, 56);if(pHost = gethostbyname(char*)szHostName) = NULL)return ;/ 在调用ioctl之前,套节字必须绑定addr_in.sin_family = AF_IN

6、ET;addr_in.sin_port = htons(0);/将本地ip复制到addr_in结构体memcpy(&addr_in.sin_addr.S_un.S_addr, pHost-h_addr_list0, pHost-h_length);/ip转换为字符串输出printf( Binding to interface : %s n, :inet_ntoa(addr_in.sin_addr);if(bind(sRaw, (PSOCKADDR)&addr_in, sizeof(addr_in) = SOCKET_ERROR)/return;/ 设置SIO_RCVALL控制代码,以便接收所有

7、的IP包DWORD dwValue = 1;/设置原始套接字能接收所有数据if(ioctlsocket(sRaw, SIO_RCVALL, &dwValue) != 0)/return ;/ 开始接收封包char buff1024;int nRet;while(TRUE)nRet = recv(sRaw, buff, 1024, 0);if(nRet 0)DecodeIPPacket(buff);closesocket(sRaw);执行结果:查看本地的ip五、实验小结1. 为了使网卡接收所有经过它的封包,要将网卡设置为混杂模式,具体是在创建原始套接字后,将它绑定到一个明确的本地地址,然后向套接字发送SIO_RCVALL控制命令,这样网卡就被设置为混杂模式。2. 可以捕获到局域网中发送的数据包的发送端IP地址以及接收端的IP地址六、附录网络编程技术与应用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号