我正在编写一个程序来发送和接收包裹。我通过 ICMP 协议发送数据没有问题,但是在获取主机 IP 或 ICMP 代码等信息时存在问题。
我通过我的程序使用代码 8('Echo Request')发送包(它有效),我的计算机收到代码 0('Echo Reply')或代码 11('Time Exceeded')。我在 Wireshark 中检查了它。
我不知道如何在收到的包中获取有关 ICMP 的信息。我的程序的一部分:
socklen_t addrlen = sizeof(connection);
if (recvfrom(sockfd, buffer, sizeof(struct iphdr) + sizeof(struct icmphdr), 0, (struct sockaddr *)&connection, &addrlen) == -1) {
perror("recv");
} else {
ip_reply = (struct iphdr*) buffer;
printf("ID: %d\n", ntohs(ip_reply->id));
printf("TTL: %d\n", ip_reply->ttl);
}
我想了解有关接收主机的 IP 和 ICMP 代码的信息。
我知道“iphdr”结构中有名为“saddr”和“daddr”的字段。但是有'_be32'类型。我不知道如何将其转换为 'char*'。
提前致谢 :)