为什么必须以大端顺序将协议发送到套接字函数,而其余参数不是?

问题描述 投票:1回答:1

我正在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))

谢谢。

python linux sockets endianness ethernet
1个回答
1
投票

我想知道在文档中什么地方说proto参数必须在网络端(大)中使用

来自man 7 packet

packet_socket = socket(AF_PACKET, int socket_type, int protocol);

...协议是IEEE802.3协议编号以网络字节顺序。看到包含文件以获取允许的协议列表。当协议设置为htons(ETH_P_ALL)时,所有协议已收到。

© www.soinside.com 2019 - 2024. All rights reserved.