编写代码实现UDP的活跃主机发现
时间: 2024-11-15 17:30:26 浏览: 9
在编写代码实现UDP的活跃主机发现时,通常我们会使用ping或ICMP协议来检测远程主机是否在线。这里提供一个简单的Python示例,使用socket库来创建一个UDP socket,并发送Ping请求:
```python
import socket
def discover_live_hosts(target_ip, port=80):
# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 设置TTL(Time To Live)以广播到网络内的所有主机
sock.setsockopt(socket.SOL_IP, socket.IP_TTL, 1)
# 发送Ping请求(实际上发送的是ICMP Echo Request)
message = b"Ping request"
sock.sendto(message, (target_ip, port))
# 接收回应并过滤出活跃主机
responses = []
while True:
data, addr = sock.recvfrom(512)
if not data or addr[0] == target_ip: # 如果是自身回复或无数据,则忽略
continue
responses.append(addr)
# 关闭socket
sock.close()
return responses
# 使用示例
live_hosts = discover_live_hosts("255.255.255.255") # 广播地址用于测试本地网络
print(f"Detected active hosts: {live_hosts}")
阅读全文