用python查找统一局域网下ip对应的mac地址

作者:月为暮 时间:2023-01-23 19:10:21 

MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡(Network lnterface Card)的EPROM(一种闪存芯片,通常可以通过程序擦写)。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的 [3]  。

MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性

我们可以编写如下python代码来查询


# arp扫描,定义一个函数,发送两层的arp包,请求同一局域网内其他IP地址的mac地址。
from scapy.all import *
import uuid,socket
# 获取本机的IP地址。
def get_ip_address():
 # 获取本机电脑名
 myname = socket.getfqdn(socket.gethostname())
 # 获取本机ip
 myaddr = socket.gethostbyname(myname)
 return myaddr
# 获取本机的mac地址。
def get_mac_address():
 mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
 return ":".join([mac[e:e + 2] for e in range(0, 11, 2)])

# arp扫描,获取统一局域网下的IP地址的mac地址。
def arp_scan(ip):
 # 获取本机的mac地址。
 local_mac = get_mac_address()
 # 获取本机的ip地址。
 local_ip = get_ip_address()
 # print(type(local_ip),type(local_mac))
 # 分隔IP地址。
 ip_split = ip.split('.')
 ip_list = []
 # 进行重新定义ip地址段。
 for i in range(1,25):
   ip_list.append(ip_split[0] + '.' + ip_split[1] + '.' + ip_split[2] + '.' + str(i))
 print(ip_list,local_ip,local_mac)
 # arp_result = srp(Ether(src = local_mac,dst = 'ff:ff:ff:ff:ff:ff')/ARP(op = 1,hw = '00:00:00:00:00:00',psrc = local_ip,pdst = ip_list),timeout = 1,verbose = False)
 # 构造二层包,写入以太网层,这里每一层包需要填什么字段,可以取scapy界面看一下。
 arp_result = srp(Ether(src=local_mac, dst='ff:ff:ff:ff:ff:ff')/ARP(op=1, hwsrc=local_mac, hwdst='00:00:00:00:00:00',psrc=local_ip, pdst=ip_list), timeout=1,verbose=False)
 # 进行解包操作。
 mac_result = arp_result[0].res
 mac_list = []
 # 找到对应的IP地址和MAC地址。
 for i in range(len(mac_result)):
   ip = mac_result[i][1][1].fields['psrc']
   mac = mac_result[i][1][1].fields['hwsrc']
   mac_list.append([ip,mac])
 return mac_list

if __name__ == "__main__":
 ip = '192.168.156.1'
 mac_list = arp_scan(ip)
 for i in range(len(mac_list)):
   print("IP地址:",mac_list[i][0],'MAC地址:',mac_list[i][1])

来源:https://www.cnblogs.com/cong12586/p/14213191.html

标签:python,ip,mac地址
0
投稿

猜你喜欢

  • 用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码

    2021-07-29 00:54:25
  • Python映射类型之dict详解

    2023-08-03 13:19:19
  • pyqt5 QProgressBar清空进度条的实例

    2022-11-28 03:04:08
  • 谈谈Python中的while循环语句

    2023-08-02 19:07:56
  • javascript unicode与GBK2312(中文)编码转换方法

    2024-04-17 10:09:36
  • Oracle数据库中的级联查询、级联删除、级联更新操作教程

    2023-06-25 19:01:42
  • Python开发企业微信机器人每天定时发消息实例

    2022-11-17 14:37:27
  • MySQL数据库本地备份和双机相互备份

    2008-05-27 12:25:00
  • asp.net 将一个图片以二进制值的形式存入Xml文件中的实例代码

    2023-07-23 13:31:30
  • python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例

    2021-07-28 18:28:45
  • Python计算一个文件里字数的方法

    2022-09-23 10:28:19
  • TXT.WORD文档下载另存为,而不是在浏览器中打开

    2007-10-25 11:43:00
  • SQL Server字符串切割函数

    2012-08-21 10:18:43
  • Google首页的CSS Sprite

    2007-09-29 21:36:00
  • python如何实现代码检查

    2022-07-22 18:19:12
  • python实现的登录与提交表单数据功能示例

    2021-04-28 21:16:38
  • Python3如何判断三角形的类型

    2022-01-06 22:12:51
  • python实现学生管理系统

    2022-12-18 02:42:22
  • SQL Server 空值处理策略[推荐]

    2024-01-15 17:07:41
  • mysql 字段定义不要用null的原因分析

    2024-01-21 10:34:30
  • asp之家 网络编程 m.aspxhome.com