#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/ip_icmp.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/time.h>
#define PACKET_SIZE 64 // ICMP报文大小
#define MAX_WAIT_TIME 2 // 最大等待时间(秒)
// 计算校验和
unsigned short calculateChecksum(unsigned short *addr, int len) {
unsigned int sum = 0;
while (len > 1) {
sum += *addr++;
len -= 2;
}
if (len == 1) {
sum += *(unsigned char *)addr;
}
sum = (sum >> 16) + (sum & 0xFFFF);
sum += (sum >> 16);
return (unsigned short)(~sum);
}
// 发送ICMP Echo请求
void sendICMPEchoRequest(int sockfd, struct sockaddr_in *dest_addr, int seq) {
struct icmp send_pkt;
int pkt_size = sizeof(struct icmp);
memset(&send_pkt, 0, pkt_size); // 清空结构体
C语言实现ping
于 2023-12-28 17:20:31 首次发布