套接字创建中的(0X0003)是什么?

mik*_*eld 6 python sniffing

我正在开发一个在 PYTHON 中进行数据包嗅探的程序,但我不明白 (0x0003) 参数在 python 中的“ntohs”函数中意味着什么。

s = socket.socket( socket.AF_PACKET , socket.SOCK_RAW , socket.ntohs(0x0003))
Run Code Online (Sandbox Code Playgroud)

小智 7

在 Linux 中socket.ntohs(0x0003),告诉捕获所有内容,包括以太网帧。要仅捕获 TCP、UDP 或 ICMP,socket.ntohs(0x0003)您可以分别编写socket.IPPROTO_TCPsocket.IPPROTO_UDPsocket.IPPROTO_ICMP

在windows中,socket只能捕获IP及以上,不能捕获以太网。为此,您可以使用pypcapWindows 中的库。


Ana*_*mar 2

这是要使用的协议。来自文档-

socket.socket([家族[,类型[,原型]]])

使用给定的地址族、套接字类型和协议号创建一个新套接字。地址族应为 AF_INET(默认)、AF_INET6 或 AF_UNIX。套接字类型应该是 SOCK_STREAM(默认)、SOCK_DGRAM 或其他 SOCK_ 常量之一。协议号通常为零,在这种情况下可以省略。

如果省略协议,则默认为 0 ,这会导致基于(第一个参数)采用协议family

对于 Linux,您可以在 中找到协议号列表/etc/protocols。我相信当您给出协议时,0x0003它正在使用 GGP(网关-网关协议)。