Python mac地址匹配和处理

时间:2013-05-30 17:23:02

标签: python mac-address pppoe

python版本2.7.3

这是迄今为止的“代码”:

import subprocess

p = subprocess.Popen(["pppoe-discovery", "-I", "eth0"], stdout=subprocess.PIPE)
output, err = p.communicate()

print output

这将给出一个包含所有已发现的pppoe服务器的字符串

我的问题是提取所有mac地址并将每个地址与预定义的列表或字符串进行比较。

即使我能找到并打印所有这些内容,我仍然不清楚作为初学者找到一个比较每个的解决方案,看看它是否在列表中。 之后我会做一些如果“条件”并发送一封包含不匹配的mac-address的电子邮件。

输出:

Access-Concentrator:xxxx        服务名称:xxxx

得到一张饼干:de 58 08 d0 66 c8 58 15 a0 66 9b b1 02 3f 7c 95 1f 42 00 00

AC-Ethernet-Address:00:22:33:6b:4b:ee

这只是其中一个服务器,列表继续。

2 个答案:

答案 0 :(得分:0)

你可以使用正则表达式来过滤掉这样的mac地址:

>>> import re
>>> input_string = "Access-Concentrator: xxxx Service-Name: xxxx Got a cookie: de 58 08 d0 66 c8 58 15 a0 66 9b b1 02 3f 7c 95 1f 42 00 00 -------------------------------------------------- AC-Ethernet-Address: 00:14:5e:6b:4b:ee –"
>>> mac = re.search(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})', input_string, re.I).group()
>>> mac
'00:14:5e:6b:4b:ee'

你可以看到新发现的MAC地址是否已经在列表中:

>>> my_macs = ['00:14:5e:6b:4b:ee','00:14:5e:6b:4b:eb','00:14:5e:6b:4b:ec']
>>> mac in my_macs
True

已添加:要查找每行的单个匹配项:

import re

my_macs = ['00:14:5e:6b:4b:ea','00:14:5e:6b:4b:eb','00:14:5e:6b:4b:ec']
mac = ''

strToFind = re.compile(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})', re.I)

for line in output.split('\n'):
    results = re.search(strToFind, line)
    if results:
        mac = results.group()
    if mac not in my_macs:
        print mac

答案 1 :(得分:0)

以上给定的正则表达式["strToFind = re.compile(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})', re.I)"]将匹配最后一个八位字节中的无效值,如'00:14:5e:6b:4b:eah'

正则表达式略有改变,只需用' $'结束最后一个八位字节。像这样:

strToFind = re.compile(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2}$)', re.I)