我正在python中使用套接字库的套接字方法,如下所示:
socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)
现在,我已经看到了使用该方法来过滤以太网数据包的一些方法,如下所示:
import socket
ETH_P_ALL = 3
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
s.close()
我想知道在文档中什么地方说proto参数必须在网络端(大)中使用。以及为什么只是proto参数,而不是其余参数。为什么不这样:
s = socket.socket(socket.htons(socket.AF_PACKET), socket.htons(socket.SOCK_RAW), socket.htons(ETH_P_ALL))
谢谢。
我想知道在文档中什么地方说proto参数必须在网络端(大)中使用
来自man 7 packet:
packet_socket = socket(AF_PACKET, int socket_type, int protocol);
...协议是IEEE802.3协议编号以网络字节顺序。看到包含文件以获取允许的协议列表。当协议设置为htons(ETH_P_ALL)时,所有协议已收到。