【问题标题】:Parsing and Comparing IP Addresses In C++在 C++ 中解析和比较 IP 地址
【发布时间】:2013-06-29 10:42:17
【问题描述】:

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

  1. 读取文件以解析 IP 地址
  2. 将从文件中解析的 IP 地址与主列表进行比较以查找缺失的 IP 地址
  3. 输出缺少的 IP 地址

什么是实现第 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 地址?

【问题讨论】:

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


    【解决方案1】:

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

    然后我会将它们插入向量中并对其进行排序。对您的主列表执行相同的操作,并使用std::set_difference 找出差异。

    【讨论】:

      【解决方案2】:

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

      //  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];
      

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

      【讨论】:

        猜你喜欢
        • 2021-01-10
        • 2012-08-26
        • 2010-11-04
        • 2014-04-06
        • 2012-05-18
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        相关资源
        最近更新 更多