【问题标题】:inet_ntoa conversion probleminet_ntoa 转换问题
【发布时间】:2011-07-08 07:58:28
【问题描述】:

在这段代码的 sn-p 中,我捕获了数据包,并尝试使用 inet_ntoa 显示源地址和目标地址,甚至在此之前我以十六进制格式打印数据包 src 和 dst 地址。这里的问题是两者都不匹配,inet_ntoa的o/p错误如o/p所示

  the src ip address should be 172.28.6.87 but inet_ntoa shows 86.212.172.28
  the src ip address should be 172.28.6.110 but inet_ntoa shows 6.87.172.28


  char *ptr = NULL;
  ptr_fltr = (struct packet_filter*)(packet); 
  memcpy(out_data,packet,50);
  printf("\n");
  for(i= 28;i<36;i++)
  printf("%#x\t",out_data[i]);
  printf("*******************************************************************\n");
  printf("---------------------Received Packet Info--------------------\n");
  ptr = inet_ntoa(ptr_fltr->ip.ip_src);
  printf("Source Ip Addr :%s\n",ptr);

这里

 struct packet_filter
  {
    struct mac_filter mac;
    struct ip_filter ip;
    union {
            struct udp_filter proto;
    }protocol;
  }__attribute__((packed));


 struct ip_filter
 {
    u_char ip_vhl;
    u_char ip_tos; /* type of service */
    u_short ip_len; /* total length */
    u_short ip_id; /* identification */
    u_short ip_off; /* fragment offset field */
    u_char ip_ttl; /* time to live */
    u_char ip_p; /* protocol */
    u_short ip_sum; /* checksum */
    struct in_addr ip_src; /* source and dest address */
    struct in_addr ip_dst; /* source and dest address */
 }__attribute__((packed));

输出

  0xac    0x1c    0x6 0x57    0xac    0x1c    0x6 0x6e         
  ************************************************************
  --------------------Received Packet Info--------------------
  Source Ip Addr :86.212.172.28
  Destination Ip Addr :6.87.172.28

【问题讨论】:

  • 只是一个问题:为什么不使用libpcap

标签: c


【解决方案1】:

很明显,当您到达 IP 地址时,您的结构已关闭了两个字节。我已经检查了 IPv4 协议,该位看起来不错。所以我怀疑struct mac 是错误的。我认为struct mac 是一个以太网框架。如果是这样,那已经有点可疑了,因为Ethernet frame 的长度不是固定的。

另外,(假设您从 Berkeley Packet Filter 获取这些信息)确保从 bpf 标头正确计算数据包的开始(您不能依赖 sizeof(struct bpf_header))。

【讨论】:

    【解决方案2】:

    您的 IP 数据包从偏移量 16 开始,如果您从以太网标头复制了 struct mac,则它的长度为 14 个字节。数据包中似乎有一些意外数据。

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 2013-07-05
      • 2017-02-18
      • 2011-03-15
      • 2016-04-17
      • 2013-11-17
      • 2011-04-29
      相关资源
      最近更新 更多