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

时间:2015-07-17 06:23:09

标签: python sniffing

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

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

5 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

3 GGP Gateway-to-Gateway

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

答案 2 :(得分:1)

在Linux中,socket.ntohs(0x0003)告诉您捕获一切,包括以太网帧。 仅捕获TCP,UDP或ICMP,而不是socket.ntohs(0x0003),您将分别编写socket.IPPROTO_TCPsocket.IPPROTO_UDPsocket.IPPROTO_ICMP

在Windows中,套接字只能捕获IP及更高版本,而不能捕获以太网。为此,您可以在Windows中使用pypcap库。

答案 3 :(得分:0)

如果你检查linux/if_ether_h,你会发现

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

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

答案 4 :(得分:0)

从python官方套接字doc

socket.ntohs(0x0003)捕获来自网络接口的所有发送和接收流量。