Python`socket.bind()`对原始套接字无效

时间:2018-11-12 11:52:48

标签: python-2.7 sockets networking icmp raw-sockets

我正在通过Python 2.7中的原始套接字发送数据包:

packet = bytearray(...)
sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
sock.bind(('192.168.1.45', 1))
sock.sendto(packet, ('8.8.8.8', 1))
sel = select.select([sock], [], [], timeout)
if len(sel[0]) > 0:
    ... receive the packet and process it ...
else:
    ... timeout ...

我的主机有两个以太网接口,eth0eth2192.168.1.45eth0的地址。如果eth0的路由优先级最高,则按预期方式工作,但是如果eth2的路由优先级最高,则tcpdump显示数据包通过eth2而不是{ {1}},并且响应永远不会到达。

我在这里出了什么问题?为什么eth0不能使数据包通过bind(...)外出?

一些相关信息:

eth0

0 个答案:

没有答案