有效的IP地址在unix上的c/c++库

Efficient IP address c/c++ library on unix

本文关键字:c++ 上的 unix IP 地址 有效      更新时间:2023-10-16

是否有一个好的高级库可以用于IP地址操纵?我需要做这样的事情:

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

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

对于c++,标准的高级答案是boost.asio。具体来说,将字符串转换为它所具有的IP地址Ip::address::from_string,要获得Ip地址的字符串表示,它有to_string.

一定要检查ip地址对象的其他构造函数——使用原始字节可能比字符串更有效。

如果你正在编写一个套接字应用程序,那么地址操作将不太可能成为你最重要的考虑因素。当您有网络I/O需要考虑时,就不要在这上面浪费时间了。

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 */
}

Poco Library有一组非常好的主机名/IP地址操作例程,以及许多其他非常棒的东西。FreeBSD端口有点过时了,但我们也许可以用一根锋利的棍子戳一下端口维护者,让他更新它。哦,等等…:)

我一直在思考ipv4/ipv6验证regexp,这是相当长的和不平凡的生产。如果你想,我可以分享。