Ping客户端创建原始套接字
时间: 2023-11-20 21:23:03 浏览: 147
可以使用以下代码创建原始套接字:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <arpa/inet.h>
int main()
{
int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if (sockfd < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
char buffer[IP_MAXPACKET];
struct sockaddr_in dest_addr;
memset(&dest_addr, 0, sizeof(dest_addr));
dest_addr.sin_family = AF_INET;
dest_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
struct icmphdr icmp_header;
memset(&icmp_header, 0, sizeof(icmp_header));
icmp_header.type = ICMP_ECHO;
icmp_header.code = 0;
icmp_header.checksum = htons(~(ICMP_ECHO << 8));
memcpy(buffer, &icmp_header, sizeof(icmp_header));
ssize_t bytes_sent = sendto(sockfd, buffer, sizeof(icmp_header), 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));
if (bytes_sent < 0) {
perror("sendto");
exit(EXIT_FAILURE);
}
return 0;
}
```
这个程序创建了一个原始套接字,使用 ICMP 协议发送一个 ICMP_ECHO 请求报文给目标 IP 地址为 127.0.0.1。需要注意的是,需要 root 权限才能运行该程序。
阅读全文