1

Ethernet II proto 0x8888 で未加工のソケットを使用して、Python でワイヤレス ブリッジ用の小さな構成ユーティリティを作成しています。Python の raw ソケットに関するチュートリアルがいくつかありますが、それらはすべて、ネットワーク インターフェイス (「eth0」、「eth1」など) をハードコードしているように見えます。 (私のラップトップでは「wlan0」)。

私の現在の作業コードは次のとおりです(残念ながらハードコードされた「wlan0」を使用):

# Create an Ethernet II broadcast of ethertype 0x8888:
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, 0x8888)
s.bind(("wlan0",0x8888))
ifName,ifProto,pktType,hwType,hwAddr = s.getsockname()
txFrame = struct.pack("!6s6sH","\xFF\xFF\xFF\xFF\xFF\xFF",hwAddr,0x8888) + "\x00"*0x32
# Send and wait for response
s.send(txFrame)

ハードコードする代わりに、現在のシステムでネットワーク インターフェイス名を取得する方法はありますか?

私は INADDR_ANY を試しましたが、それもうまくいきません。

4

1 に答える 1

0

subprocess と re を使用して、ネットワーク インターフェイスのリストを取得できます。

import subprocess, re

config = subprocess.check_output("ifconfig")
expr = re.compile("([a-zA-Z0-9]+)\s+Link")
interfaces = expr.findall(config)

ifconfig には、「ダウン」したインターフェイスを表示できるオプションもありますが、ブロードキャストする場合は必要ないと思います。詳細については、を参照man ifconfigしてください。

于 2012-02-05T17:58:57.183 に答える