Почему протокол должен быть отправлен в функцию сокета в порядке big-endiannes, а остальные параметры - нет? - PullRequest
1 голос
/ 14 марта 2020

Я использовал метод сокета lib для сокета в python, который выглядит следующим образом:

socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

Теперь я видел некоторые способы использования метода для фильтрации пакетов rnet , который выглядит следующим образом:

import socket
ETH_P_ALL = 3
s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(ETH_P_ALL))
s.close()

Я хочу знать, где в документации сказано, что параметр proto должен использоваться в endiannes сети (большой). И почему только параметр прото, а также не все остальные. Почему бы не это:

s = socket.socket(socket.htons(socket.AF_PACKET), socket.htons(socket.SOCK_RAW), socket.htons(ETH_P_ALL))

Спасибо.

1 Ответ

1 голос
/ 14 марта 2020

Я хочу знать, где в документации написано, что параметр proto должен использоваться в сети endiannes (большой)

Из пакет man 7 :

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

... протокол - это номер протокола IEEE 802.3 в сетевом порядке байтов . См. Включаемый файл для списка разрешенных протоколов. Если для протокола установлено значение htons (ETH_P_ALL), то принимаются все протоколы.

...