unix上高效的IP地址c / c ++库

时间:2011-05-02 12:50:24

标签: c++ python c freebsd ipv6

是否有可用于IP地址操作的好的高级库?我需要做以下事情:

  • 给定一个字符串,查明它是否是有效的IPv4 / IPv6地址。
  • 具有ntop和pton等功能

我可以使用低级inet_ntop()等。但是有更好的库可以更好更快地处理这些(c / c ++ / python)吗?

5 个答案:

答案 0 :(得分:3)

对于C ++,标准的高级答案是boost.asio。具体来说,将字符串转换为它具有的IP地址 ip::address::from_string并获取IP地址的字符串表示形式,它有to_string

检查other constructors是否有ip地址对象 - 使用原始字节可能比字符串更有效。

答案 1 :(得分:1)

如果您正在编写套接字应用程序,那么地址操作极不可能成为您最重要的考虑因素。当您有网络I / O担心时,不要浪费时间。

答案 2 :(得分:1)

inet_ntopinet_pton不支持IPv6区域,因此推荐的API只是getaddrinfogetnameinfo,它们与IP版本无关。

传递NI_NUMERICHOST等标志以强制进行IP地址验证而不进行DNS解析。

http://msdn.microsoft.com/en-us/library/ms738532(VS.85).aspx

示例:

char* input_str
struct addrinfo *result = NULL, hints;
ZeroMemory( &hints, sizeof(hints) );
hints.ai_flags = AI_NUMERICHOST;
hints.ai_family = AF_UNSPEC;
dwRetval = getaddrinfo( input_string, NULL, &hints, &result );
if ( dwRetval != 0 ) {
     /* failure */
}

答案 3 :(得分:0)

我有令人难以置信的ipv4 / ipv6验证正则表达式,这是非常长且非平凡的产生。如果你愿意,我可以分享。

答案 4 :(得分:0)

Poco Library有一套很好的主机名/ IP地址操作例程,还有很多其他很棒的东西。 FreeBSD端口有点过时了,但是我们也许可以用尖锐的棍子戳端口维护者并让他更新它。哦,等等...... :)