有效的IP地址在unix上的c/c++库
Efficient IP address c/c++ library on unix
是否有一个好的高级库可以用于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_ntop
和inet_pton
不支持IPv6区域,因此推荐的api只是getaddrinfo
和getnameinfo
,它们方便地与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,这是相当长的和不平凡的生产。如果你想,我可以分享。
相关文章:
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 物理键盘上的触发器按键
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 集合上的输出迭代器:assign和increment迭代器
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 对于set上的循环-获取next元素迭代器
- 如何从棋盘上的箱号中找到行和列
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- if数组上的随机数
- 向量上的线性搜索
- 位阵列上的快速AND运算
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- 为什么一个向量上的多线程操作很慢
- 64位机器上的C++内存对齐
- 跟踪滚动条上的鼠标事件