socket(AF_INET, SOCK_RAW, IPPROTO_IP)的意思
来源:互联网 发布:h3c dhcp mac地址绑定 编辑:程序博客网 时间:2024/05/19 02:16
这是include/linux/in.h里的定义:
/* Standard well-defined IP protocols. */
enum {
IPPROTO_IP = 0, /* Dummy protocol for TCP */
IPPROTO_ICMP = 1, /* Internet Control Message Protocol */
IPPROTO_IGMP = 2, /* Internet Group Management Protocol */
IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94) */
IPPROTO_TCP = 6, /* Transmission Control Protocol */
IPPROTO_EGP = 8, /* Exterior Gateway Protocol */
IPPROTO_PUP = 12, /* PUP protocol */
IPPROTO_UDP = 17, /* User Datagram Protocol */
IPPROTO_IDP = 22, /* XNS IDP protocol */
IPPROTO_DCCP = 33, /* Datagram Congestion Control Protocol */
IPPROTO_RSVP = 46, /* RSVP protocol */
IPPROTO_GRE = 47, /* Cisco GRE tunnels (rfc 1701,1702) */
IPPROTO_IPV6 = 41, /* IPv6-in-IPv4 tunnelling */
IPPROTO_ESP = 50, /* Encapsulation Security Payload protocol */
IPPROTO_AH = 51, /* Authentication Header protocol */
IPPROTO_BEETPH = 94, /* IP option pseudo header for BEET */
IPPROTO_PIM = 103, /* Protocol Independent Multicast */
IPPROTO_COMP = 108, /* Compression Header protocol */
IPPROTO_SCTP = 132, /* Stream Control Transport Protocol */
IPPROTO_UDPLITE = 136, /* UDP-Lite (RFC 3828) */
IPPROTO_RAW = 255, /* Raw IP packets */
IPPROTO_MAX
};
--------------------------------------------------------------------------------------------------------
对于socket(AF_INET, SOCK_RAW, IPPROTO_IP),其原型为
int socket (int domain, int type, int protocol);
1 参数protocol用来指明所要接收的协议包,如果是象IPPROTO_TCP(6)这种非0、非255的协议,当操作系统内核碰到ip头中protocol域和创建socket所使用参数protocol相同的IP包,就会交给这个raw socket来处理,因此,一般来说,要想接收什么样的数据包,就应该在参数protocol里来指定相应的协议。当内核向此raw socket交付数据包的时候,是包括整个IP头的,并且已经是重组好的IP包。
2 如果protocol是IPPROTO_RAW(255),这时候,这个socket只能用来发送IP包,而不能接收任何的数据。发送的数据需要自己填充IP包头,并且自己计算校验和。
3 对于protocol为0(IPPROTO_IP)的raw socket。用于接收任何的IP数据包。其中的校验和和协议分析由程序自己完成。
- socket(AF_INET, SOCK_RAW, IPPROTO_IP)的意思
- socket(AF_INET,SOCK_RAW,IPPROTO_IP)的意思
- socket(AF_INET, SOCK_STREAM, IPPROTO_IP);//创建TCPsocket
- AF_INET socket / sock bigpicture
- socket(AF_INET, SOCK_STREAM…
- sd = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, 0, 0, 0);
- PF_PACKET AF_INET raw socket 区别
- sock_raw
- sock_raw
- WSASocket的参数IPPROTO_IP和IPPROTO_TCP
- 本地应用程序利用socket(AF_INET)通信的数据在内核中的流向
- socket编程为什么要选择AF_INET?
- socket编程为什么要选择AF_INET
- PF_INET 和 AF_INET的说明!
- AF_INET和PF_INET的区别
- AF_INET和PF_INET的区别
- AF_INET与PF_INET的区别
- PF_INET 和 AF_INET的区别
- C语言学习_002_C语言概述
- Linux的启动流程(/etc/inittab)
- RedHat linux AS 5下VirtualBox3.1.6增强功能的安装
- mysql dump备份和恢复
- 找出一堆数里面出现次数最多或最多的前N个数字
- socket(AF_INET, SOCK_RAW, IPPROTO_IP)的意思
- Mobile Web App发展现状及展望
- zeroMQ/jzmq 安装
- hibernate配置属性hbm2dll.auto初步理解
- 对C++ STL,list元素的循环删除操作 //断链,出错地方
- flex菜鸟必知一
- 使用CALL和EXEC調用存儲過程的區別
- Python正则表达式实例
- 10405 Longest Common Subsequence