2015-07-17 1 views
2

я м разрабатывает программу для перехвата пакетов в Питоне, но я не получаю то, что делает параметр (0x0003) означает, что в функции «ntohs» в питона ..Что такое (0X0003) в создании сокетов?

s = socket.socket(socket.AF_PACKET , socket.SOCK_RAW , socket.ntohs(0x0003)) 
+0

кажется как шестнадцатеричный код. –

ответ

1

Это протокол. От documentation -

socket.socket([family[, type[, proto]]])

Create a new socket using the given address family, socket type and protocol number. The address family should be AF_INET (the default), AF_INET6 or AF_UNIX. The socket type should be SOCK_STREAM (the default), SOCK_DGRAM or perhaps one of the other SOCK_ constants. The protocol number is usually zero and may be omitted in that case.

Если протокол, то по умолчанию пропущены 0, что приводит к тому, протокол должны быть приняты на основе family (первый аргумент).

Для linux вы можете найти список номеров протоколов в /etc/protocols. Я считаю, что когда вы указываете протокол как 0x0003, он использует протокол GGP (Gateway-Gateway).

+0

Я использую ту же строку в моей программе: s = socket.socket (socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0003)) и получение ошибки, которая ... _sock = _realsocket (family, type, proto) socket. error: [Errno 1] Операция не разрешена .. что я должен использовать вместо параметров? –

1

Последний параметр - и обычно остается 0, что задокументировано here.

IANA Перечислим Assigned Internet Protocol Numbers «0x0003` определяется как:

3 GGP Gateway-to-Gateway

ntohs() Функция хотя используется для сделать Endian своп на номер, если требуется (на основе архитектуры вы работаете на). Для вашего примера это может быть 0x0300 или 768, что для меня не имеет смысла. Возможно, кто-то еще знает о специальном прецеденте, о котором я не знаю.

+0

Thankx martin !!! – mikescofield

0

Если вы проверяете linux/if_ether_h вы ЗВС

#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */ 

так 0x0003 означает захватить все пакеты

Смежные вопросы