当前位置: 首页 > news >正文

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

依赖python库:

pip install socket
pip install scapy

运行代码:

import socket
from scapy.layers.l2 import ARP, Ether, srpdef get_hostname(ip_address):try:return socket.gethostbyaddr(ip_address)[0]except socket.herror:# 未能解析主机名return Nonedef 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_requestanswered_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}")  # DEBUGreturn devices_list# 请替换成你的实际IP范围
network_devices = scan_network('192.168.1.1/24')raspberry_pis = [device for device in network_devices ifdevice['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指令了,代码如下:

import socket
from scapy.layers.l2 import ARP, Ether, srp
import subprocessdef get_hostname(ip_address):try:return socket.gethostbyaddr(ip_address)[0]except socket.herror:# 未能解析主机名return Nonedef ping_host(hostname):try:subprocess.check_output(['ping', '-4', hostname])return Trueexcept subprocess.CalledProcessError:return Falsedef get_ip_from_hostname(hostname):try:return socket.gethostbyname(hostname)except socket.error:return Nonedef 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_requestanswered_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}")  # DEBUGreturn devices_listdef 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 devicereturn 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~

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

http://www.lryc.cn/news/283616.html

相关文章:

  • 乐观锁与悲观锁:高并发场景下的选择
  • vue2 省市区联动组件封装
  • VScode远程开发
  • 芯片设计重要工具—— IBM LSF 分布式高性能计算调度平台
  • RDMA Scatter Gather List详解
  • 【动态规划】24子数组系列_最长湍流子数组_C++
  • fastJson和jackson的日期数据处理
  • 书生·浦语大模型实战营第五节课笔记及作业
  • 如何在CentOS 7 中基于OpenSSL 3.0 搭建Python 3.0 环境
  • 爬虫接口获取外汇数据(汇率,外汇储备,贸易顺差,美国CPI,M2,国债利率)
  • Spring Cloud和微服务架构的关系
  • C++:通过ofstream写入二进制文件内容
  • 系统配置dns主从服务器
  • 【git】解决网络连接问题
  • 限制API接口访问速率
  • 广东省第三届职业技能大赛“网络安全项目”B模块--数字取证解析
  • 全链路压力测试:现代软件工程中的重要性
  • 【计算机网络】难点、易遗忘点总结
  • 谷达冠楠科技:抖音开网店新手小白可以卖的产品
  • 爬虫案例—根据四大名著书名抓取并存储为文本文件
  • 阿里云容器服务助力万兴科技 AIGC 应用加速
  • STM32F103标准外设库——认识STM32(一)
  • 设计模式——1_5 享元(Flyweight)
  • kafka系列(二)
  • Ubuntu20.04安装配置OpenCV-Python库并首次执行读图
  • 经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练
  • 半波整流电路原理详解+参数与计算公式
  • GZ036 区块链技术应用赛项赛题第3套
  • LeetCode142.环形链表II
  • 触摸按键控制LED灯