发现网络中的活动主机(1人)(比较简单) 设计程序,发送 ICMP 数据包,以获取指定网段中的活动主机,并将结果显示在标准输出设到文件中。
时间: 2024-10-13 17:10:42 浏览: 31
在网络发现中,使用ICMP(Internet Control Message Protocol,互联网控制消息协议)是一个常见的技术,特别是利用`ping`命令来探测活动主机。在Python中,我们可以使用`socket`库来实现这个功能。下面是一个简单的Python脚本示例:
```python
import socket
import time
def discover_live_hosts(target_subnet):
# 创建一个UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 设置广播模式
message = "ping" # ICMP数据包通常包含的是一个固定的请求报文
request = (target_subnet, 0, message, socket.IPPROTO_ICMP)
while True:
try:
# 发送并接收ICMP请求
sock.sendto(request, target_subnet)
data, addr = sock.recvfrom(512)
# 如果收到响应,说明主机在线
if data and data.decode() == 'pong': # 假设主机返回"pong"作为应答
print(f"Host at {addr[0]} is active.")
with open('active_hosts.txt', 'a') as file: # 将结果写入文件
file.write(f"{addr[0]}\n")
except Exception as e:
print(f"Error: {e}")
break
time.sleep(1) # 为了防止过于频繁地发送请求
# 替换为你的目标网段,例如192.168.1.0/24
discover_live_hosts('192.168.1.0')
阅读全文