【发布时间】:2017-02-16 21:14:39
【问题描述】:
我正在尝试创建 DHCP 服务器,第一步是通过我的以太网端口发送数据包。我正在尝试将数据包发送到我的以太网接口并弹出错误消息。
代码如下。
import socket
def sendeth(src, dst, eth_type, payload, interface = "eth0"):
"""Send raw Ethernet packet on interface."""
assert(len(src) == len(dst) == 6) # 48-bit ethernet addresses
assert(len(eth_type) == 2) # 16-bit ethernet type
#s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
# From the docs: "For raw packet
# sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])"
s.bind((interface, 0))
return s.send(src + dst + eth_type + payload)
if __name__ == "__main__":
print("Sent %d-byte Ethernet packet on eth0" %
sendeth("\xFE\xED\xFA\xCE\xBE\xEF",
"\xFE\xED\xFA\xCE\xBE\xEF",
"\x7A\x05",
"hello"))
我在创建套接字的方式上遇到了问题。 AF_PACKET 无法识别,所以我假设它仅适用于 Linux。我将其注释掉并在其下方添加了一个新行。我再次运行它,我开始收到如下所示的错误。
Traceback (most recent call last):
File "eth.py", line 27, in <module>
"hello"))
File "eth.py", line 19, in sendeth
s.bind((interface, 0))
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.gaierror: [Errno 11001] getaddrinfo failed
有人知道为什么会这样吗?
【问题讨论】:
-
你在为接口传递什么? “eth0”在 Windows 上不起作用。
-
确实,根据我对 Windows 套接字的经验,接口名称通常是难以理解的。甚至还有一个第三方模块来处理它们
标签: python windows python-2.7 sockets dhcp