我正在开发一个在 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_TCP、socket.IPPROTO_UDP和socket.IPPROTO_ICMP。
在windows中,socket只能捕获IP及以上,不能捕获以太网。为此,您可以使用pypcapWindows 中的库。
这是要使用的协议。来自文档-
socket.socket([家族[,类型[,原型]]])
使用给定的地址族、套接字类型和协议号创建一个新套接字。地址族应为 AF_INET(默认)、AF_INET6 或 AF_UNIX。套接字类型应该是 SOCK_STREAM(默认)、SOCK_DGRAM 或其他 SOCK_ 常量之一。协议号通常为零,在这种情况下可以省略。
如果省略协议,则默认为 0 ,这会导致基于(第一个参数)采用协议family。
对于 Linux,您可以在 中找到协议号列表/etc/protocols。我相信当您给出协议时,0x0003它正在使用 GGP(网关-网关协议)。