Inet_aton()返回无效IP地址成功
inet_aton() returning success for invalid ip addresses?
我正在寻找一些函数来验证,如果给定字符串是一个有效的ipv4地址,但是inet_aton()似乎对像"11"answers"1.1"这样的字符串很满意
验证ipv4字符串的最佳方法是什么?
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
struct in_addr addr;
if (argc != 2) {
fprintf(stderr, "%s <dotted-address>n", argv[0]);
exit(EXIT_FAILURE);
}
if (inet_aton(argv[1], &addr) == 0) {
fprintf(stderr, "Invalid addressn");
exit(EXIT_FAILURE);
}
printf("%sn", inet_ntoa(addr));
exit(EXIT_SUCCESS);
}
一些无效字符串的输出是
[root@ ~]# ./a.out 1.1
1.0.0.1
[root@ ~]# ./a.out "1 some junk"
0.0.0.1
[root@ ~]# ./a.out "10 some junk"
0.0.0.10
我想要一个例程来拒绝任何非点分十进制的字符串X.x.x.x, x从0到255
这是inet_aton
的指定/文档行为。
如果您只想接受点分四十进制表示法,请使用:
unsigned char *a = (void *)&addr, dummy;
if (sscanf(src, "%3hhd.%3hhd.%3hhd.%3hhd%c", a, a+1, a+2, a+3, &dummy)!=4) {
/* error */
}
或者,您可以使用inet_pton
函数,该函数在接受的格式方面有更多的限制。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- C++-模板嵌套类的引用初始化无效
- 我正在开发服务器,ip作为参数传递不起作用
- 错误:无效的预处理指令 #i 的意思是 #if?
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 如何修复无效的API密钥,IP或操作权限错误?
- 在无效地址上,boost::asio::ip:::address::from_string 没有引发异常
- 在 ipv6 链接范围单播 udp 客户端-服务器中应用 boost::asio::ip::udp,有时有效,但有时无效
- Inet_aton()返回无效IP地址成功