使用ICMP探查网络活动主机程序

需积分: 10 11 下载量 65 浏览量 更新于2024-09-11 3 收藏 6KB TXT 举报
"发现网络中的活动主机源程序是一款利用ICMP协议进行网络主机探测的应用,它能够自动向指定网段内的所有IP地址发送ICMP消息,并根据收到的回应列出活动主机。程序通过封装和解析ICMP数据报文,实现网络扫描功能,无需在DOS环境下执行ping命令。" 在编程领域,特别是网络编程中,ICMP(Internet Control Message Protocol,互联网控制消息协议)是TCP/IP协议栈的一个重要组成部分,用于在IP网络中传输错误和控制信息。例如,我们熟知的ping命令就是基于ICMP协议来检测网络连通性的。 该源程序的主要工作流程如下: 1. **初始化网络连接**:首先,程序需要初始化Winsock库,这通常是通过调用`WSAStartup`函数完成的,以确保网络编程所需的服务就绪。在给定的代码中,`WSADATA wsaData`变量用于存储初始化结果。 2. **创建原始套接字**:为了发送和接收ICMP数据报文,程序需要创建一个原始套接字。原始套接字允许应用程序直接处理IP头部,而不只是应用层协议(如TCP或UDP)。在Windows中,使用`socket`函数创建套接字,类型为`SOCK_RAW`。 3. **设置目的地址**:程序定义了结构体`struct sockaddr_in dest`来存储目标主机的IP地址和端口信息,以便于向特定主机发送ICMP请求。 4. **填充ICMP数据**:`fill_icmp_data`函数用于生成ICMP数据包的内容,包括 ICMP 请求的类型(如 ICMP_ECHO8 表示回显请求)和其他相关字段。 5. **计算校验和**:`checksum`函数用于计算ICMP数据报文的校验和,这是ICMP协议规范的一部分,确保数据在传输过程中没有被篡改。 6. **发送ICMP请求**:使用创建的原始套接字,程序可以调用`sendto`函数将封装好的ICMP数据报文发送到目标主机。 7. **接收ICMP响应**:程序创建一个缓冲区`recvbuf`来接收响应,设置`fromlen`为`sizeof(from)`以存储接收方的地址信息,然后使用`recvfrom`函数等待并接收ICMP响应。 8. **解析响应**:接收到ICMP响应后,`decode_resp`函数解析响应数据,提取相关信息,例如类型、代码、ID、序列号等。 9. **处理结果**:根据解析出的响应,判断目标主机是否活跃。如果收到回应,则说明该IP地址上存在活动主机。 10. **结束并清理**:最后,程序可能需要释放分配的内存,关闭套接字,并调用`WSACleanup`来清理Winsock环境。 这个源程序提供了一种自动化的方法来探测网络中的活动主机,对于网络管理员来说,这是一个非常实用的工具,能够快速了解网络状况,找出可能存在的在线设备。同时,它也展示了如何在Windows环境下利用原始套接字进行低级别的网络通信。