1
我正在爲Python中的無線網橋編寫一個小配置實用程序,使用以太網II協議0x8888的原始套接字。有幾個關於python原始套接字的教程,但是它們都似乎對網絡接口(「eth0」,「eth1」等)進行了硬編碼,這是我不想要的,因爲每臺計算機可能有不同的網絡接口(在我的筆記本上它的「wlan0」)。在python中的原始套接字的網絡接口?
我當前工作的代碼是(不幸的是用硬編碼「爲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,但那也不管用。
「套接字」函數的第三個參數是協議類型,它不應該是「0x8888」,而應該是「網絡順序中的IEEE 802.3協議號」(參見http://www.kernel.org/doc /man-pages/online/pages/man7/packet.7.html) – 2012-02-05 17:54:13
大多數計算機有幾個不同的接口。我的筆記本電腦有5個,例如:eth6,wlan0,lo,tunl0,sit0。你如何區分它們以達到你的目的? – 2012-02-05 17:54:33
我使用的協議實際上是協議ID爲0x8888的原始以太網II協議(它不是IP協議!),因此socket的第三個參數是正確的。該協議的反向工程描述在:http://wiki.kainhofer.com/hardware/vap11g_wlan_bridge – 2012-02-05 18:03:48