在C ++中解析和比较IP地址

时间:2013-07-02 06:54:00

标签: c++ string parsing comparison ip-address

我正在尝试编写一个执行以下操作的实用程序:

  1. 读取文件以解析IP地址
  2. 将从文件解析的IP地址与主列表进行比较以找到缺失的
  3. 输出缺少的IP地址
  4. 实施第2项和第3项的好方法是什么?到目前为止,我正在执行以下操作以获取我从文件中解析的IP地址数的总数:

    if (strstr (line, "IP_Address=128.10.")) {
        fprintf(ofp, "%s\n", line);
        ip_addresses++; // counter for IP addresses starting with 128.10
    }
    

    我应该如何将已解析的IP地址与我的主列表进行比较,以及在检查IP列表时如何检测丢失的IP地址?

2 个答案:

答案 0 :(得分:3)

我会在读取时将每个IP地址转换为32位无符号整数(至少假设是IPv4,似乎就是这种情况)。

然后我将它们插入到矢量中并对它们进行排序。对主列表执行相同操作,并使用std::set_difference查找差异。

答案 1 :(得分:0)

首先,将地址转换为无符号整数。假设您将解析后的地址保留为整数数组,代码可能如下所示:

//  If ip is 195.102.45.203, then unsigned int IP = {195, 102, 45, 203};
unsigned int identifier = 0;
identifier = ((IP[0]*255 + IP[1])*255 + IP[2])*255 + IP[3];

将所有标识符插入某个向量,对其进行排序并对主列表中的地址执行相同操作。然后检查是否有遗漏。