0

UDP 套接字(SOCK_DGRAM)是否可以从传入的 UDP 数据包访问校验和字段并检查错误?我知道我们可以使用原始套接字(SOCK_RAW)来做到这一点,但我想知道我们是否可以使用数据报套接字来做到这一点。如果是这样,我们如何在 C 中做到这一点?

4

2 回答 2

1

如果您创建一个普通的 UDP 套接字,则您无权访问 UDP 标头,因此也无权访问校验和。但是内核已经丢弃了校验和不正确的数据包,因此您无论如何都不会看到这些数据包。

于 2019-10-25T05:59:35.113 回答
0

您不能使用数据报套接字 (SOCK_DGRAM) 来执行此操作,因为 TCP/IP 堆栈会在将接收到的缓冲区中删除这些 UDP 标头字节,然后再将其传递给更高层的 API。您需要使用原始套接字 (SOCK_RAW) 以便保留这些字节。

于 2019-10-25T06:02:53.850 回答