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

问题描述 投票:2回答:3

我在PYTHON开发了一个数据包嗅探程序,但我没有得到(0x0003)参数在python中的'ntohs'函数中的含义。

s = socket.socket( socket.AF_PACKET , socket.SOCK_RAW , socket.ntohs(0x0003))
python sniffing
3个回答
1
投票

这是使用的协议。来自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(网关 - 网关协议)。


1
投票

最后一个参数是protocol,通常保留为0,记录为here

IANA列表Assigned Internet Protocol Numbers,'0x0003`定义为:

3 GGP Gateway-to-Gateway

如果需要,ntohs()函数用于对数字进行字节序交换(基于您运行的体系结构)。对于你的例子,这可能是0x0300768,这对我没有意义。也许其他人知道我不知道的特殊用例。


0
投票

如果你检查linux/if_ether_h你会哇

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

所以0x0003意味着捕获所有数据包

© www.soinside.com 2019 - 2024. All rights reserved.