用python查找统一局域网下ip对应的mac地址
作者:月为暮 发布时间:2023-01-23 19:10:21
标签:python,ip,mac地址
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])
来源:https://www.cnblogs.com/cong12586/p/14213191.html
0
投稿
猜你喜欢
- pytorch的广播语义(broadcasting semantics),和numpy的很像,所以可以先看看numpy的文档:1、什么是广播
- 以下函数采用FSO对象,文件位置在FSO.ASP。FSO对象的文件编码属性只有三种,系统默认,Unicode,ASCII,并没有我们要的ut
- 前言用阻塞 API 写同步代码最简单,但一个线程同一时间只能处理一个请求,有限的线程数导致无法实现万级别的并发连接,过多的线程切换也抢走了
- FTP服务器FTP服务器是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务。FTP是File Transfer Prot
- 如下所示:beta分布的最大特点是其多样性, 从下图可以看出, beta分布具有各种形态, 有U形, 类似正态分布的形状, 类似unifor
- defer介绍defer是golang的一个特色功能,被称为“延迟调用函数”。当外部函数返回后执行defer。类似于其他语言的 try… c
- 超级鹰平台验证码的破解可以有以下方式:简单的数字字母组合可以使用图像识别(python 现成模块),成功率不高使用第三方打码平台(破解验证码
- 具体不多说,直接上代码。欢迎一起交流和学习。创建一个按月创建表的存储过程,SQL语句如下:DELIMITER // DROP PROCEDU
- 基本语法在讲述if-else时已经提到,如果有多个判断条件,Go语言中提供了Switch-Case的方式。如果switch后面不带条件相当于
- 如何生成任意n阶的三对角矩阵数学作业要求实现共轭梯度法的算法。题目中的矩阵A是n=400/500/600的三对角矩阵。在网上查阅资料未果后,
- 有时候,因为内容的更改或者隐私问题,我们往往不 希望别人通过“百度快照”的方法 查看 自己网站的某一些网页,对于网站管理员来说,百度快照也分
- 目的:删除文件之后,如果目录为空,递归删除为空的目录。svr.dataDir指目录的最外层,递归删除目录的时候判断到这一层即可。eg:/Us
- 导语带大家写个冷笑话生成器吧,感觉蛮有意思的。废话不多说,让我们愉快地开始吧~开发工具Python版本:3.7.8相关模块:pyqt5模块;
- SQL Server 2000 的 XML 功能可以简化将现有代码作为 Web 服务提供的任务。本文集中讨论了传入和传出 Transact
- 配置文件如下,下面对配置文件进行一一解释"""Django settings for film1_manage
- 本文记录了mysql 8.0.12 安装配置方法,供大家参考,具体内容如下1、从官网下载MySQL for Windows:https://
- MySQL是一个关系型数据库管理系统,官方网站是http://www.mysql.com/,分为MySQL Enterprise Editi
- Firebug: Firebug 是firefox中最为经典的开发工具,可以监控请求头,响应头,显示资源
- 本文通过Python3+pyqt5实现了python Qt GUI 快速编程的16章的excise例子。#!/usr/bin/env pyt
- 一,写在前面的话最近公司需要按天,按小时查看数据,可以直观的看到时间段的数据峰值。接到需求,就开始疯狂百度搜索,但是搜索到的资料有很多都不清