码迷,mamicode.com
首页 > 其他好文 > 详细

原始套接字

时间:2018-11-15 00:09:11      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:应用   int   进程   一个   数据报   ipv4   接口   soc   注意   

定义原始套接字的目的在于提供访问某个协议的接口, 通过原始套接字, 进程可以读写ICMPv4, IGMPv4和ICMPv6等分组, 进程也可以读写内核不处理其协议字段的IPv4数据报, 进程还可以使用IP_HDRINCL套接字选项自行构造IPv4首部。

创建一个原始套接字步骤如下:

int sockfd = socket(AF_INET, SOCK_RAW, protocol) 或者

int sockfd = socket(AF_INET6, SOCK_RAW, protocol)

其中protocol 通常不为0, 比如在ping程序中, protocol指定为IPPROTO_ICMP或IPPROTO_ICMPV6。

值得注意的是, 通过IPv6原始套接字发送和接收的协议首部中的所有字段均采用网络字节序, 另外通过IPv6原始套接字无法读入或写出完整的IPv6分组, 包括IPv6首部或任何扩展首部, 如果应用进程需要读入或者写出完整的IPv6数据报, 那就必须使用数据链路访问。

无论何时, 往一个原始IPv4套接字递送一个接收到的数据报, 传递到该套接字所在进程的都是包括IP首部在内的完整数据报, 而对于IPv6套接字, 传递到套接字的只是扣除了IPv6首部和所有扩展首部的净荷

原始套接字

标签:应用   int   进程   一个   数据报   ipv4   接口   soc   注意   

原文地址:https://www.cnblogs.com/bzaq/p/9961057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!