从文件中读取IP地址的最有效方法

时间:2013-04-10 09:28:06

标签: c linux ip

我的文本文件包含许多(数百万)IP4和IP6地址。我需要尽快阅读所有这些内容。

我知道inet_pton但我不知道地址是IP4还是IP6所以我需要做“尝试和错误”的方法,我尝试IP4,如果失败,请尝试IP6。但是我不喜欢这个解决方案,因为当它是IP6时,我会不必要地解析IP4。

1 个答案:

答案 0 :(得分:0)

我认为您需要做的就是解析当前行中的字符,直到您点击非十进制数字(因为IPv6使用十六进制,而IPv4通常不会,如果我们可以假设点分十进制)或冒号。

如果你点了一个点,你知道该行是一个IPv4地址,否则就是IPv6。

最多四个字节的额外解析应该真的快。

这是尝试实现此分类功能:

int get_af(const char *address)
{
  while(isdigit((unsigned int) *address))
    ++address;
  if(*address == '.')
    return AF_INET;
  if(*address == ':' || isxdigit((unsigned int) *address))
    return AF_INET6;
  return -1;
}

以上假设AF_INETAF_INET6都不是-1,因为它用于错误报告。这可能需要调整。