1. 创建原始套接字
注意:原始套接字要超级用户才能使用。
调用socket函数,即可创建原始套接字。参数需要注意变更:
int socket(AF_INET,SOCK_RAW,protocol)
int socket(AF_PACKET,SOCK_RAW,protocol)
2. 发送消息
调用sendto可以发送信息
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
3. 接收消息
在下列情况下,内核会将接收到的IP数据报文传递给原始套接字
a. 接收到的TCP/UDP不会传递到任何套接字
b. ICMP分组会在内核处理完其中的ICMP消息后,传递到原始套接字
c. IGMP分组同上
d. 内核不认识其协议字段的IP数据包
接收消息函数