簡體   English   中英

python中原始套接字的網絡接口?

[英]Network interface for raw sockets in python?

我正在用Python編寫一個小的配置實用程序,用於Python的無線網橋,使用帶有Ethernet II proto 0x8888的原始套接字。 有一些關於python原始套接字的教程,但是它們似乎都對網絡接口(“ 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,但這也不起作用。

您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM