用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 set集合类型操作总结
Nov 07 Python
Python实现文件按照日期命名的方法
Jul 09 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
pandas 数据实现行间计算的方法
Jun 08 Python
python树莓派红外反射传感器
Jan 21 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
Jan 22 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
简单了解python高阶函数map/reduce
Jun 28 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
Django如何实现上传图片功能
Aug 16 Python
Python MySQLdb 执行sql语句时的参数传递方式
Mar 04 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实现图片裁剪、添加水印效果代码
2014/10/01 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
Javascript 继承机制的实现
2009/08/12 Javascript
js转义字符介绍
2013/11/05 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
详解webpack的配置文件entry与output
2017/08/21 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
echarts整合多个类似option的方法实例
2018/07/10 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python三元运算实现方法
2015/01/12 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Pytorch to(device)用法
2020/01/08 Python
python将图片转base64,实现前端显示
2020/01/09 Python
Python爬取12306车次信息代码详解
2020/08/12 Python
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
中学实习教师自我鉴定
2013/12/12 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
检讨书模板
2015/01/29 职场文书
python调试工具Birdseye的使用教程
2021/05/25 Python
html5实现点击弹出图片功能
2021/07/16 HTML / CSS