IP如何使用“ inet_ntop()”存储在缓冲区中

时间:2018-09-30 20:03:54

标签: c linux packet-sniffers

我写了一个数据包嗅探器代码,一切正常,但是我想将数据包与特定IP分开。为此,我需要访问缓冲区,该缓冲区通过使用inet_ntop()存储IP地址。如何比较“ sbuf / dbuf”和特定IP。我尝试通过将IP存储在另一个“字符”数组中并进行比较来进行尝试,但是没有用。

这是我的传入数据包IP的代码;

/* Parse IP protocol */
        struct iphdr *ip = (struct iphdr*) next_hdr;
        char sbuf[32];
        char dbuf[32];          
        printf("\tIP version: %u ihl: %u ttl: %u protocol: %u src: %s dst %s\n",    
            ip->version,
            ip->ihl,
            ip->ttl,
            ip->protocol,
            inet_ntop(AF_INET, &ip->saddr, sbuf, sizeof(sbuf)),
            inet_ntop(AF_INET, &ip->daddr, dbuf, sizeof(dbuf))
        );

只需要帮助我比较传入的数据包中的特定IP,剩下的我就解决。

我在这个问题上停留了一段时间。帮助... !!!

我正在Linux上工作。

1 个答案:

答案 0 :(得分:0)

您应该反过来进行;将您要查找的IP转换为整数,然后直接与ip->saddr进行比较:

in_addr_t x = inet_addr("1.2.3.4");
if (x == ip->saddr) {
    // Do something
}

这应该是更有效和更好的方法。