高效的Unix下IP地址c/c++库
有没有什么好的高级库可以用来处理IP地址?我需要做一些事情,比如:
- 给定一个字符串,判断它是否是一个有效的IPv4或IPv6地址。
- 需要有像ntop和pton这样的功能。
- 等等。
我可以使用低级的inet_ntop()等函数。但有没有更好的库可以更快更好地处理这些(适用于C/C++/Python)?
5 个回答
1
inet_ntop
和 inet_pton
这两个函数不支持IPv6的区域,所以推荐使用的API是 getaddrinfo
和 getnameinfo
,这两个函数在处理IP地址时不管是IPv4还是IPv6都能通用。
可以传递一些标志,比如 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 */
}
1
如果你在写一个使用套接字的应用程序,地址处理通常不是你最需要考虑的事情。与其花时间在这上面,不如把精力放在网络输入输出上。
3
对于C++来说,比较高层次的推荐是使用boost.asio这个库。具体来说,如果你想把一个字符串转换成IP地址,可以用ip::address::from_string这个方法。而如果你想把IP地址转换成字符串表示,可以使用to_string。
另外,建议你看看其他构造函数,因为直接使用原始字节可能比用字符串更高效。