用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使用in操作符时元组和数组的区别分析
May 19 Python
Python三种遍历文件目录的方法实例代码
Jan 19 Python
Python socket套接字实现C/S模式远程命令执行功能案例
Jul 06 Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
Python神奇的内置函数locals的实例讲解
Feb 22 Python
python requests证书问题解决
Sep 05 Python
Python pandas库中的isnull()详解
Dec 26 Python
解决python图像处理图像赋值后变为白色的问题
Jun 04 Python
基于Python爬取素材网站音频文件
Oct 21 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
PHP 源代码压缩小工具
2009/12/22 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
JS实现可控制的进度条
2020/03/25 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
Python 用户登录验证的小例子
2013/03/06 Python
python刷投票的脚本实现代码
2014/11/08 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
python cookie反爬处理的实现
2020/11/01 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
如何进行有效的自我评价
2013/09/27 职场文书
优秀员工表扬信
2014/01/17 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
地球一小时倡议书
2014/04/15 职场文书
电子信息工程自荐信
2014/05/26 职场文书
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏
Python闭包的定义和使用方法
2022/04/11 Python
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技