用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通过post提交数据的方法
May 06 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
简单了解django orm中介模型
Jul 30 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
Django Model中字段(field)的各种选项说明
May 19 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 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
typecho插件编写教程(一):Hello World
2015/05/28 PHP
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
python编程羊车门问题代码示例
2017/10/25 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
使用python制作一个解压缩软件
2019/11/13 Python
Python如何实现大型数组运算(使用NumPy)
2020/07/24 Python
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
母亲节演讲稿范文
2014/01/02 职场文书
生物制药专业自我鉴定
2014/02/19 职场文书
小学生开学感言
2014/02/28 职场文书
学校宣传标语
2014/06/18 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
张思德观后感
2015/06/09 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
导游词之任弼时故居
2020/01/07 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
php双向队列实例讲解
2021/11/17 PHP
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js