gpt4 book ai didi

python - 错误的 UDP 校验和无效 : why?

转载 作者:行者123 更新时间:2023-12-05 06:26:42 31 4
gpt4 key购买 nike

我正在尝试测试一个 UDP 程序,看看如果它收到带有错误 UDP 校验和的数据会发生什么。奇怪的是,它似乎没有任何效果,并且通过环回接口(interface)成功接收了有效载荷,至少在 OS X 上是这样。

下面是一个示例,其中使用 SOCK_RAW + IPPROTO_UDP 发送数据,手动将校验和指定为不正确的内容,并使用 SOCK_DGRAM 接收数据.

import asyncio
import socket
import struct

async def server():
with \
socket.socket(
socket.AF_INET, socket.SOCK_DGRAM
) as sock:
sock.setblocking(False)
sock.bind(('', 4567))
payload = await loop.sock_recv(sock, 512)
print(payload) # Prints b'somedata'

async def main():
asyncio.ensure_future(server())
await asyncio.sleep(0)

with socket.socket(
family=socket.AF_INET, type=socket.SOCK_RAW, proto=socket.IPPROTO_UDP,
) as sock:

local_ip = '127.0.0.1'
src_port = 4566
dest_port = 4567

payload = b'somedata'
length = 8 + len(payload)
checksum = 3 # 3 is not the right checksum
header_bad_checksum = struct.pack('!4H', src_port, dest_port, length, checksum)
sock.sendto(header_bad_checksum + payload, (local_ip, 4567))

await asyncio.sleep(1)

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()

这是为什么?我本以为有效载荷会被忽略。


此 UDP 消息的 Wireshark 转储如下,显示(在本例中)校验和为 3。

enter image description here

最佳答案

这是预期的行为。来自f5 website

This is an expected behavior as tcpdump tool on Linux because the checksum is offloading on your NIC but tcpdump reads IP packets from the Linux kernel right before the actual checksum takes place in the NIC chipset.

关于python - 错误的 UDP 校验和无效 : why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55797731/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com