查找局域网树莓派raspberry的mac地址和ip

依赖python库:

python 复制代码
pip install socket
pip install scapy

运行代码:

python 复制代码
import socket
from scapy.layers.l2 import ARP, Ether, srp


def get_hostname(ip_address):
    try:
        return socket.gethostbyaddr(ip_address)[0]
    except socket.herror:
        # 未能解析主机名
        return None


def scan_network(ip_range):
    """
    扫描指定 IP 范围内的局域网,返回找到的 IP 和 MAC 地址列表
    """
    arp_request = ARP(pdst=ip_range)
    broadcast = Ether(dst="ff:ff:ff:ff:ff:ff")
    arp_request_broadcast = broadcast / arp_request
    answered_list = srp(arp_request_broadcast, timeout=1, verbose=False)[0]

    devices_list = []
    for sent, received in answered_list:
        hostname = get_hostname(received.psrc)
        devices_list.append({'ip': received.psrc, 'mac': received.hwsrc, 'hostname': hostname})
        print(f"IP: {received.psrc}, MAC: {received.hwsrc}, Hostname: {hostname}")  # DEBUG

    return devices_list


# 请替换成你的实际IP范围
network_devices = scan_network('192.168.1.1/24')

raspberry_pis = [device for device in network_devices if
                 device['hostname'] and 'raspberrypi' in device['hostname'].lower()]

for pi in raspberry_pis:
    print(f"Found Raspberry Pi! Hostname: {pi['hostname']}, IP: {pi['ip']}, MAC: {pi['mac']}")

以上代码的运行有个工具的依赖

  1. Npcap来源github
    Npcap来自官网

  2. Bonjour来自github(这个通常Windows会自带,如果没有就下载安装一下)

通常,上面这个代码可能无法正常显示raspberry的主机名,那就要结合ping -4 raspberrypi.local指令了,代码如下:

python 复制代码
import socket
from scapy.layers.l2 import ARP, Ether, srp
import subprocess


def get_hostname(ip_address):
    try:
        return socket.gethostbyaddr(ip_address)[0]
    except socket.herror:
        # 未能解析主机名
        return None


def ping_host(hostname):
    try:
        subprocess.check_output(['ping', '-4', hostname])
        return True
    except subprocess.CalledProcessError:
        return False


def get_ip_from_hostname(hostname):
    try:
        return socket.gethostbyname(hostname)
    except socket.error:
        return None


def scan_network(ip_range):
    """
    扫描指定 IP 范围内的局域网,返回找到的 IP 和 MAC 地址列表
    """
    arp_request = ARP(pdst=ip_range)
    broadcast = Ether(dst="ff:ff:ff:ff:ff:ff")
    arp_request_broadcast = broadcast / arp_request
    answered_list = srp(arp_request_broadcast, timeout=1, verbose=False)[0]

    devices_list = []
    for sent, received in answered_list:
        hostname = get_hostname(received.psrc)
        devices_list.append({'ip': received.psrc, 'mac': received.hwsrc, 'hostname': hostname})
        print(f"IP: {received.psrc}, MAC: {received.hwsrc}, Hostname: {hostname}")  # DEBUG

    return devices_list


def find_raspberry_pi(devices_list):
    raspberry_pi_hostname = 'raspberrypi.local'
    if ping_host(raspberry_pi_hostname):
        raspberry_pi_ip = get_ip_from_hostname(raspberry_pi_hostname)
        for device in devices_list:
            if device['ip'] == raspberry_pi_ip:
                return device
    return None


# 请替换成你的实际IP范围
network_devices = scan_network('192.168.1.1/24')
raspberry_pi = find_raspberry_pi(network_devices)

if raspberry_pi:
    print(
        f"Found Raspberry Pi! Hostname: {raspberry_pi['hostname']}, IP: {raspberry_pi['ip']}, MAC: {raspberry_pi['mac']}")
else:
    print("Raspberry Pi not found on the network.")

看看运行结果:

已经顺利找到了局域网树莓派的ip~

如果还有什么问题,欢迎留言~

相关推荐
Icoolkj4 分钟前
WebRTC 与 WebSocket 的关联关系
websocket·网络协议·webrtc
红米饭配南瓜汤7 分钟前
WebRTC中的几个Rtp*Sender
网络·网络协议·音视频·webrtc·媒体
猫头虎3 小时前
[特殊字符]解决 “IDEA 登录失败。不支持早于 14.0 的 GitLab 版本” 问题的几种方法
java·ide·网络协议·http·https·gitlab·intellij-idea
2501_916007475 小时前
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_916013745 小时前
使用 Windows 完成 iOS 应用上架:Appuploader对比其他证书与上传方案
websocket·网络协议·tcp/ip·http·网络安全·https·udp
济宁雪人6 小时前
HTTP协议
网络·网络协议·http
emo了小猫7 小时前
HTTP连接管理——短连接,长连接,HTTP 流水线
网络·网络协议·http
muyouking118 小时前
用 n8n 提取静态网页内容:从 HTTP Request 到 HTML 节点全解析
网络协议·http·html
浩浩测试一下19 小时前
Authpf(OpenBSD)认证防火墙到ssh连接到SSH端口转发技术栈 与渗透网络安全的关联 (RED Team Technique )
网络·网络协议·tcp/ip·安全·网络安全·php
孤寂大仙v20 小时前
【计算机网络】网络层IP协议与子网划分详解:从主机通信到网络设计的底层逻辑
tcp/ip·计算机网络·php