Я пишу небольшую утилиту для настройки беспроводного моста в 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, но это тоже не работает.