批量查询mac地址oui厂商名称

在做dhcp分配的时候需要查询一些mac地址的厂商名称,故写了两个实现该功能的小程序。

使用macvendors提供的API

一个python小程序,通过macvendors.com提供的REST API来查询。

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
#-*-coding:utf-8-*-
#ver 0.0.1
#maintained by tyr.chen
#use api.macvendors.com to lookup vendors.
import urllib2
import sys
macfile=open(sys.argv[1],'rU')
seq=0
for line in macfile:
#跳过空行
if line.strip() == '' :
continue
seq+=1
#mac地址以':'分割
if ':' in line :
maclist=line.split(':')
macstr='-'.join(maclist).strip()
#mac地址以'-'分割
else :
macstr=line.strip()
url='http://api.macvendors.com/'+macstr
try:
html=urllib2.urlopen(url,timeout=3).read()
except urllib2.HTTPError:
print '%-4d\t%-17s\t%s' %(seq,macstr,'[NOT FOUND]')
except:
print '%-4d\t%-17s\t%s' %(seq,macstr,'[OPEN ERROR]')
continue
else:
print '%-4d\t%-17s\t%s' %(seq,macstr,html)
print 'done.'

使用方法: python lookup-mac.py ,其中中mac地址以’:’或者’-‘分割,如

1
2
3
4
5
34:36:3b:d0:9c:66
48:74:6e:09:7a:1d
#or
34-36-3b-d0-9c-66
48-74-6e-09-7a-1d

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ python lookup-mac.py mac.list
1 00-f7-6f-c0-90-b3 APPLE, INC.
2 18-4f-32-0e-dc-2f HON HAI PRECISION IND. CO.,LTD.
3 1c-cb-99-e8-54-d0 TCT MOBILE LTD
4 34-36-3b-d0-9c-66 APPLE, INC.
5 48-74-6e-09-7a-1d APPLE, INC.
6 4c-7c-5f-20-51-6b APPLE, INC.
7 4c-7c-5f-4b-19-80 APPLE, INC.
8 52-54-00-60-32-5f [NOT FOUND]
9 52-54-00-8f-c0-e9 [NOT FOUND]
10 52-54-00-ce-5d-50 [NOT FOUND]
11 60-57-18-ff-19-e6 INTEL CORPORATE
done.

使用IEEE的oui.txt离线查询

其实macvendors.com使用的就是IEEE官网的oui.txt来进行查询的,这个文件由IEEE来维护,记录了oui和对应的厂商,我们可以直接在这个oui文件中查询。
我们可以通过wget http://standards-oui.ieee.org/oui/oui.txt来获得该文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
#ver 0.0.1
#maintained by tyr.chen
#use oui.txt to lookup vendors.
#Usage: ./lookup-oui.sh mac.txt
seq=0
while read line;do
let seq=seq+1
mac=`echo $line | tr -d ':-' | cut -c 1-6 | tr [a-z] [A-Z]`
echo -ne $seq '\t' $line '\t'
if value=`grep $mac oui.txt` ;then
echo $value | sed -e 's/.*16)[[:blank:]]*//g' -e 's/.*hex)[[:blank:]]*//g'
else
echo '[NOT FOUND]'
fi
done < $1

mac.txt同样按照上面所述,以’:‘ 或者’-‘分割。
运行上述脚本时需要保证脚本和oui.txt在同一目录下。

如果您觉得这篇文章对您有帮助,不妨支持我一下!