用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 递归函数详解及实例
Dec 27 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
python抓取网站的图片并下载到本地的方法
May 22 Python
tensorflow实现简单的卷积神经网络
May 24 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
解决python3 安装不了PIL的问题
Aug 16 Python
python查看数据类型的方法
Oct 12 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
python编程项目中线上问题排查与解决
Nov 01 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实时显示输出
2008/10/02 PHP
简单的PHP缓存设计实现代码
2011/09/30 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
PHP goto语句用法实例
2019/08/06 PHP
取得父标签
2006/11/14 Javascript
JavaScript触发器详解
2007/03/10 Javascript
google地图的路线实现代码
2009/08/20 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
JS delegate与live浅析
2013/12/21 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
使用 Node.js 开发资讯爬虫流程
2018/01/07 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
Weblogc domain问题
2014/01/27 面试题
出生医学证明样本
2014/01/17 职场文书
优秀经理事迹材料
2014/02/01 职场文书
护理不良事件检讨书
2014/02/06 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
实现GO语言对数组切片去重
2022/04/20 Golang