用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 selenium文件上传方法汇总
Nov 19 Python
python调用API实现智能回复机器人
Apr 10 Python
对PyTorch torch.stack的实例讲解
Jul 30 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
python程序如何进行保存
Jul 03 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
python如何爬取网页中的文字
Jul 28 Python
Python暴力破解Mysql数据的示例
Nov 09 Python
python opencv人脸识别考勤系统的完整源码
Apr 26 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获取linux命令结果的实例
2017/03/13 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
2017/02/22 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
python实现小球弹跳效果
2019/05/10 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
教育专业个人求职信
2013/12/02 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang