乐闻世界logo
搜索文章和话题

Python 代码如何查找本地网络中的所有 IP 地址?

1 个月前提问
1 个月前修改
浏览次数2

1个答案

1

在Python中,要查找本地网络中所有的IP地址,我们可以使用一些网络库如 socketscapy。下面我将分步骤介绍如何使用这些工具来发现本地网络的活跃IP地址。

使用 socket 库获取本地IP地址

首先,我们可以使用 socket 库获取本地机器的IP地址。这是发现网络中其他设备的起点。

python
import socket def get_local_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # doesn't have to be reachable s.connect(('10.254.254.254', 1)) IP = s.getsockname()[0] except Exception: IP = '127.0.0.1' finally: s.close() return IP

使用 scapy 库扫描本地网络

接下来,我们可以使用 scapy 库来扫描整个子网。scapy 是一个强大的Python库,用于网络包处理。

首先,你需要安装 scapy

bash
pip install scapy

然后,我们可以编写一个函数来扫描网络上的IP:

python
from scapy.all import ARP, Ether, srp def scan_ip(local_ip): prefix = local_ip.rsplit('.', 1)[0] # 获取IP地址前缀 # IP地址范围,例如 192.168.1.1/24 target_ip = f"{prefix}.1/24" # 创建ARP请求包 (who has) arp = ARP(pdst=target_ip) ether = Ether(dst="ff:ff:ff:ff:ff:ff") # Ethernet frame packet = ether/arp result = srp(packet, timeout=3, verbose=0)[0] # 发送包并接收响应 # 提取响应包中的IP地址 live_hosts = [] for sent, received in result: live_hosts.append({'ip': received.psrc, 'mac': received.hwsrc}) return live_hosts # 主函数 if __name__ == "__main__": local_ip = get_local_ip() print(f"Your local IP address: {local_ip}") hosts = scan_ip(local_ip) print("Live hosts on the network:") for host in hosts: print(f"IP: {host['ip']}, MAC: {host['mac']}")

解释

  1. 获取本地IP: 我们首先确定本机的IP地址,这对于定义要扫描的IP范围很重要。
  2. 定义IP范围:我们通过简单地更改最后一个八位字节来生成同一子网内的所有IP地址。
  3. 发送ARP请求:我们为每个IP地址发送ARP请求来查看哪些地址有响应。
  4. 收集和打印结果: 对于响应ARP请求的设备,我们记录下它们的IP和MAC地址,并将它们打印出来。

这个方法可以有效地帮助你找到同一局域网内的所有活跃设备。

2024年8月21日 01:34 回复

你的答案