小编Sr1*_*4th的帖子

在 C 中使用 icmp 实现 traceroute

我正在尝试通过构造适当的 ip 标头和 icmp 标头来使用 icmp 原始套接字实现 traceroute。我使用的端口号是 7 并且我已经计算了校验和。每次增加跳数限制并发送一个数据包直到回复消息包含类型 0 的回显回复。

#include "libsock"
#include<netinet/ip.h>
#include<netinet/ip_icmp.h>


unsigned short
csum (unsigned short *buf, int nwords)
{
  unsigned long sum;
  for (sum = 0; nwords > 0; nwords--)
    sum += *buf++;
  sum = (sum >> 16) + (sum & 0xffff);
  sum += (sum >> 16);
  return ~sum;
}

int
main (int argc, char *argv[])
{
  if (argc != 2)
    {
      printf ("need destination for tracert\n");
      exit (0);
    }
  int sfd = socket …
Run Code Online (Sandbox Code Playgroud)

c sockets icmp

5
推荐指数
1
解决办法
8135
查看次数

标签 统计

c ×1

icmp ×1

sockets ×1