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


Posted in Python onJanuary 13, 2021

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])

以上就是用python查找统一局域网下ip对应的mac地址的详细内容,更多关于python 查找mac地址的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python返回真假值(True or False)小技巧
Apr 10 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
python对文件目录的操作方法实例总结
Jun 24 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
Oct 17 Python
使用Python刷淘宝喵币(低阶入门版)
Oct 30 Python
简单了解python字符串前面加r,u的含义
Dec 26 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
python3实现名片管理系统(控制台版)
Nov 29 Python
详解在OpenCV中如何使用图像像素
Mar 03 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 Python
python 写一个水果忍者游戏
Jan 13 #Python
python中编写函数并调用的知识点总结
Jan 13 #Python
Python jieba库分词模式实例用法
Jan 13 #Python
python中yield的用法详解
Jan 13 #Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 #Python
selenium如何定位span元素的实现
Jan 13 #Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 #Python
You might like
php下将XML转换为数组
2010/01/01 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
简单了解python单例模式的几种写法
2019/07/01 Python
opencv导入头文件时报错#include的解决方法
2019/07/31 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
工业学校毕业生自荐信范文
2014/01/03 职场文书
迟到检讨书1000字
2014/01/15 职场文书
中英文求职信范文
2014/01/27 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
浅析InnoDB索引结构
2021/04/05 MySQL
Go语言安装并操作redis的go-redis库
2022/04/14 Golang
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL