C中的原始套接字

时间:2016-01-09 13:58:15

标签: c linux sockets networking

1

socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

linux手册页说明了这段代码。

在socket选项中,如果设置了IP_HDRINCL,我可以创建IP头。我对吗? 如果它是正确的,那么套接字上面也让我也可以创建TCP头文件了吗?

然后,如果没有设置IP_HDRINCL,那么套接字上面是什么意思?

2

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

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

我知道IPPROTO_RAW无法接收任何IP数据包。在这里,这些套接字只能接收TCP数据包,每个接收UDP pakcets。(我能看到IP报头,以太网报头吗?) 但发送怎么样?我不知道这件事。

1 个答案:

答案 0 :(得分:3)

  1. IP_HDRINCL表示:我希望我的数据(发送和recv)包含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。

相关问题