python 套接字地址信息输出的含义
meaning of python socket address info output
我正在尝试理解 python 套接字地址信息输出的含义。
import socket
rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
pkt = rawSocket.recvfrom(2048)
print pkt[1]
('ens33', 2048, 1, 1, 'HE \xfd\x12h')
ens33是发送数据的接口
我猜缓冲区大小是2048
我不知道第一个“1”是什么。有时它是“0”。
我注意到第二个“1”与接口有关(即 "lo" 的“772”)
'HE \xfd\x12h' :恢复转换后的十六进制值,我们得到'\x48\x45\x20\xfd\x12\x68',它给出主机machine的mac地址虚拟机桥接连接。
所以,主要问题是针对 #3。 1 或 0 在这里意味着什么?
简而言之,第三个1
表示它是一个广播包。 0
意味着它是一个数据包,地址为机器 运行 Python 代码。详情如下。
这是基于Python 3.6,但对于其他 Py2 或 Py3 版本的答案应该类似。答案分为 source for the socket module, the packet(7) man page, and the Linux source.
Python 库包含函数 makesockaddr()
. For PF_PACKET
sockets (same as AF_PACKET
), the relevant portion gives you the following order of fields. Explanations from the man page 以斜体显示。
ifname
(例如,ens33
)(接口名称,如您所述)
sll_protocol
(例如,2048
)Physical-layer 协议
sll_pkttype
(例如,1
)数据包类型
sll_hatype
(例如,1
)ARP 硬件类型
sll_addr
(例如,MAC 地址,如上所述)Physical-layer 地址
Linux 来源给出了 packet type 的各种值。在该列表中,1
是 PACKET_BROADCAST
。 0
是 PACKET_HOST
,解释为 "To us"。
我正在尝试理解 python 套接字地址信息输出的含义。
import socket
rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
pkt = rawSocket.recvfrom(2048)
print pkt[1]
('ens33', 2048, 1, 1, 'HE \xfd\x12h')
ens33是发送数据的接口
我猜缓冲区大小是2048
我不知道第一个“1”是什么。有时它是“0”。
我注意到第二个“1”与接口有关(即 "lo" 的“772”)
'HE \xfd\x12h' :恢复转换后的十六进制值,我们得到'\x48\x45\x20\xfd\x12\x68',它给出主机machine的mac地址虚拟机桥接连接。
所以,主要问题是针对 #3。 1 或 0 在这里意味着什么?
简而言之,第三个1
表示它是一个广播包。 0
意味着它是一个数据包,地址为机器 运行 Python 代码。详情如下。
这是基于Python 3.6,但对于其他 Py2 或 Py3 版本的答案应该类似。答案分为 source for the socket module, the packet(7) man page, and the Linux source.
Python 库包含函数 makesockaddr()
. For PF_PACKET
sockets (same as AF_PACKET
), the relevant portion gives you the following order of fields. Explanations from the man page 以斜体显示。
ifname
(例如,ens33
)(接口名称,如您所述)sll_protocol
(例如,2048
)Physical-layer 协议sll_pkttype
(例如,1
)数据包类型sll_hatype
(例如,1
)ARP 硬件类型sll_addr
(例如,MAC 地址,如上所述)Physical-layer 地址
Linux 来源给出了 packet type 的各种值。在该列表中,1
是 PACKET_BROADCAST
。 0
是 PACKET_HOST
,解释为 "To us"。