用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操作 hbase 数据的方法
Dec 18 Python
python获取当前用户的主目录路径方法(推荐)
Jan 12 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
python简单实现操作Mysql数据库
Jan 29 Python
Python多层装饰器用法实例分析
Feb 09 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
pandas DataFrame创建方法的方式
Aug 02 Python
python框架flask表单实现详解
Nov 04 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 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
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
JavaScript之数组(Array)详解
2015/04/01 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
判断颜色是否合法的正则表达式(详解)
2017/05/03 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
python中将字典转换成其json字符串
2014/07/16 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python yield与实现方法代码分析
2018/02/06 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
儿童学习python的一些小技巧
2018/05/27 Python
python与mysql数据库交互的实现
2020/01/06 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
python日期与时间戳的各种转换示例
2020/02/12 Python
python 弧度与角度互转实例
2020/04/15 Python
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
软环境建设心得体会
2014/09/09 职场文书
质量承诺书格式范文
2015/04/28 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python