我在PYTHON开发了一个数据包嗅探程序,但我没有得到(0x0003)参数在python中的'ntohs'函数中的含义。
s = socket.socket( socket.AF_PACKET , socket.SOCK_RAW , socket.ntohs(0x0003))
这是使用的协议。来自documentation -
socket.socket([family [,type [,proto]]])
使用给定的地址系列,套接字类型和协议号创建一个新套接字。地址族应为AF_INET(默认值),AF_INET6或AF_UNIX。套接字类型应该是SOCK_STREAM(默认值),SOCK_DGRAM或者其他SOCK_常量之一。协议号通常为零,在这种情况下可以省略。
如果省略protocol,则默认为0,这将导致基于family
(第一个参数)采用协议。
对于linux,您可以在/etc/protocols
中找到协议编号列表。我相信当你将协议作为0x0003
时,它正在使用GGP(网关 - 网关协议)。
最后一个参数是protocol
,通常保留为0,记录为here。
IANA列表Assigned Internet Protocol Numbers,'0x0003`定义为:
3 GGP Gateway-to-Gateway
如果需要,ntohs()
函数用于对数字进行字节序交换(基于您运行的体系结构)。对于你的例子,这可能是0x0300
或768
,这对我没有意义。也许其他人知道我不知道的特殊用例。
如果你检查linux/if_ether_h你会哇
#define ETH_P_ALL 0x0003 /* Every packet (be careful!!!) */
所以0x0003意味着捕获所有数据包