开箱后收到奇怪的协议

2024-05-20 15:47:16 发布

您现在位置:Python中文网/ 问答频道 /正文

设置连接。你知道吗

HOST = socket.gethostbyname(socket.gethostname())
con = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
con.bind((HOST, 0))
con.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
con.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

接收数据。你知道吗

raw_data, addr = con.recvfrom(65536)

原始数据:\x45\x00\x00\x77\x00\x00\x40\x00\x40\x11\xb4\xc0\xc0\xa8\x02。。。

解包原始数据。你知道吗

dest, src, proto = struct.unpack('! 6s 6s H', data[:14])

目的地:\x45\x00\x00\x77\x00\x00

src:\x40\x00\x40\x11\xb4\xc0

原型:49320

所以我的问题是:我是不是犯了一个明显的错误?49320是什么样的以太网类型(协议)?你知道吗


Tags: iphostdata原始数据socketconx00x11
1条回答
网友
1楼 · 发布于 2024-05-20 15:47:16

您是从哪里读取IPV4数据包定义的?
你对数据的解释完全错误!你知道吗

看起来您混淆了OSI模型中的第2层(数据链路)和第3层(网络层)。插座在第三层。socketraw允许您从第3层读取原始数据包。你知道吗

看看这些链接:

  1. IPv4 packet structure
  2. List of IP Protocol Numbers

因此,给出以下数据:
\x45\x00\x00\x77\x00\x00\x40\x00\x40\x11\xb4\xc0\xc0\xa8\x02...

\x45     = Version (IPV4) + IHL (5 32bit ints = 20 bytes)
\x00     = DCSP (0 - best effort) + ECN (0 - Non ECN-Capable Transport, Non-ECT)
\x00\x77 = Total length (119 bytes)
\x00\x00 = Identification (0)
\x40\x00 = Flags (100 - MF - more fragments) + Fragment Offset (0)
\x40     = TTL (64 seconds)
\x11     = Protocol (UDP)
\xb4\xc0 = Header Checksum (0xb4c0)

Followed by source IP then dest IP. You haven't given these 
  fully so I can't decode them.

我希望这现在是有意义的。你知道吗

相关问题 更多 >