Python mac地址匹配与处理

2024-04-29 15:58:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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地址。在

输出:

接入集中器:xxxx 服务名称:xxxx

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

交流以太网地址:00:22:33:6b:4b:ee

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


Tags: 字符串代码import服务器列表outputmac地址
2条回答

你可以用regex过滤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地址是否已经在列表中:

^{pr2}$

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

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

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

对regex稍作修改,最后一个八位字节以“$”结尾。像这样:

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

相关问题 更多 >