1

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

AC イーサネット アドレス: 00:22:33:6b:4b:ee

これはサーバーの 1 つにすぎません。リストは続きます。

4

2 に答える 2

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

追加:行ごとに 1 つの一致を探すには:

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
于 2013-05-30T19:05:11.627 に答える