c - in_addr 随机结果

标签 c network-programming pcap

我正在使用 pcap 库,我正在 try catch 源和目标 IP 地址,但它似乎给我完全随机的结果:

这是我的结构:

struct sniff_ip {
  u_char ip_vhl;
  u_char ip_tos;
  u_short ip_len;
  u_short ip_id;
  u_short ip_off;
  u_char ip_ttl;
  u_char ip_p;
  u_short ip_sum;
  struct in_addr ip_src, ip_dst;
};

这里是使用该结构的相关代码:

void print_payload(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)
{
  const struct sniff_ip *ip;
  int i=0;
  static int count=0;

  ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
  printf("Source [%s]  - Destination [%s]\n", inet_ntoa(ip->ip_src), inet_ntoa(ip->ip_dst));
  printf("Payload:\n");
  for(i=0; i<pkthdr->len; i++)
  {
    if(isprint(packet[i]))
      printf("%c", packet[i]);
    else
      printf(".", packet[i]);
    if((i%16 == 0 && i != 0) || ( i== pkthdr->len-1))
      printf("\n");
  }
}

输出是:

Source [207.117.127.0]  - Destination [207.117.127.0]
Payload:
................E
..<m4@.@..u.....
.......Q@1......
....0....@......
1\.........
Source [60.190.127.0]  - Destination [60.190.127.0]
Payload:
................E
..(..@.@.<......
...........Q@1.P
...wN..

IP 地址似乎完全是随机的,不是我的。预期的输出是显示我自己的源 IP 和目标 IP,因为我正在通过连接到自己来测试它。我在端口 23 上运行它以避免任何其他数据干扰。

编辑:我让它工作了,出于某种原因我必须远程登录到“eth0”而不是“localhost”才能工作。然而,一旦我将端口更改为更有用的东西,比如端口 80,它就可以正常工作。我不确定为什么端口 23 不同,但是哦,好吧。

最佳答案

inet_ntoa 返回指向其内部缓冲区的指针,因此您不太可能在对 printf 的一次调用中使用两个 inet_ntoa 并希望不同的结果。

关于c - in_addr 随机结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9032937/

相关文章:

c - pcap_loop 只是等待

C - if 语句可以更改变量的值

c - 如何确定 C 结构中一个指针的元素数量

c - Doxygen 文档所有条件定义

c++ - 写入套接字时使用 write() 而不是 send() 的性能影响

c# - PCAP 库功能(编写新的 PCAP 文件)

c - 将 config.txt 数据保存在双向链表中

java - 出现java.net.UnknownHostException,无法ping通任何网站,但可以正常浏览

c - pcap_next() 将地址返回到不可访问的内存区域

c - 数据包中的字符串搜索并打印数据包数据