用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实现排序算法
Feb 14 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
django开发教程之利用缓存文件进行页面缓存的方法
Nov 10 Python
python3+PyQt5泛型委托详解
Apr 24 Python
python3实现随机数
Jun 25 Python
Python Pywavelet 小波阈值实例
Jan 09 Python
快速解决docker-py api版本不兼容的问题
Aug 30 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
Python 删除List元素的三种方法remove、pop、del
Nov 16 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
Python爬虫之爬取某文库文档数据
Apr 21 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/12/19 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
php中namespace use用法实例分析
2016/01/22 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
移动端js图片查看器
2016/11/17 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
JavaScript中的call和apply的用途以及区别
2017/01/11 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
python 代码运行时间获取方式详解
2020/09/18 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
移动通信专业自荐信范文
2013/11/12 职场文书
市场营销专科应届生求职信
2013/11/24 职场文书
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
绿色环保口号
2014/06/12 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
初中同学会致辞
2015/08/01 职场文书
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
Java设计模式中的命令模式
2022/04/28 Java/Android