
原始套接字Raw Sockets原始套接字允许应用程序直接读写内核未处理的网络层协议数据包常用于网络诊断和协议开发。引用[2]对其核心特性进行了系统总结。1. 核心特性权限要求创建原始套接字需超级用户权限root或SUID程序套接字类型intsockfdsocket(AF_INET,SOCK_RAW,IPPROTO_XXX);// IPPROTO_ICMP、IPPROTO_UDP 等数据包构造默认接收包含 IP 首部的完整数据包设置IP_HDRINCL选项可手动构造 IP 首部inton1;setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,on,sizeof(on));2. 关键编程细节IP 首部构造需手动填充ip_v版本、ip_hl首部长度、ip_tos服务类型等字段校验和计算要求structip*ip_header(structip*)packet_buf;ip_header-ip_sum0;ip_header-ip_sumin_cksum((u_short*)ip_header,sizeof(structip));3. 典型应用场景类型工具示例实现原理简述网络诊断ping构造 ICMP Echo 请求/响应路径追踪traceroute发送 TTL 递增的 UDP/ICMP 包并解析超时协议验证自定义协议实现构造非标准协议头部用于测试4. 安全与权限约束原始套接字可能被滥用如伪造源地址攻击需严格控制权限现代系统通常限制原始 ICMP/UDP 包的构造