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代码来查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# 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地址的资料请关注服务器之家其它相关文章!
原文链接:https://www.cnblogs.com/cong12586/p/14213191.html