gpt4 book ai didi

c - C 中的原始套接字

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:57 26 4
gpt4 key购买 nike

1.

socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

linux 手册页介绍了这段代码。

在套接字选项中,如果设置了 IP_HDRINCL,我可以制作 IP header 。我对吗?如果是对的,上面的套接字也让我制作 TCP header 吗?

那么,如果没有设置IP_HDRINCL,上面的socket是什么意思?

2.

 socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
socket(AF_INET, SOCK_RAW, IPPROTO_UDP);

与第 1 个问题的代码相比,上面的代码意味着什么?

我知道 IPPROTO_RAW 无法接收任何 IP 数据包。在这里,这些套接字只能接收 TCP 数据包和 UDP 数据包。(我可以看到 IP header ,以太网 header 吗?)但是发送呢??我不太清楚这个。

最佳答案

  1. IP_HDRINCL 表示:我希望我的数据(用于发送和接收)包含 ip hdr。如果您的数据包括 ip hdr,则意味着 tcp hdr 紧随其后(紧随 ip hdr 之后),最后还有应用程序的消息(您通常要发送的消息......)。如果没有 IP_HDRINCL,您只能访问应用数据。

  2. 是的,如您所说,IPPROTO_TCP 和 IPPROTO_UDP 与 SOCK_RAW 只是过滤器,用于发送接收。使用 IPPROTO_RAW 可以发送任何 TCP/IP 数据包(无过滤器)。但要同时接收数据包,您还需要将 AF_INET 更改为 AF_PACKET。

关于c - C 中的原始套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34694345/

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