[置顶] linux 判断是否是合法ip,根据域名获取ip
2018-01-31 14:41
489 查看
// // Created by darren on 18-1-31. // #include <stdio.h> #include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> bool isValidIP(const char *ipstr); int get_ip_by_domain(const char *domain, char *ip); void test_Big_endian(); int is_valid_ip(const char *ip_str); int main(int argc, char *argv[]) { printf("isValidIP():%d\n", isValidIP(argv[1])); printf("is_valid_ip:%d\n", is_valid_ip(argv[1])); char tmp[256]; int ret = get_ip_by_domain(argv[1], tmp); printf("domain:%d,%s\n", ret, tmp); test_Big_endian(); return 0; } int is_valid_ip(const char *ip_str) { struct sockaddr_in sa; int result = inet_pton(AF_INET, ip_str, &(sa.sin_addr)); if (result == 0) { return result; } return 1; } void test_Big_endian() { unsigned long a = 0x12345678; unsigned char *p = (unsigned char *) (&a); printf("主机字节序:%0x %0x %0x %0x\n", p[0], p[1], p[2], p[3]); unsigned long b = htonl(a); //将主机字节序转化成了网络字节序 p = (unsigned char *) (&b); printf("网络字节序:%0x %0x %0x %0x\n", p[0], p[1], p[2], p[3]); } //根据域名获取ip int get_ip_by_domain(const char *domain, char *ip) { char **pptr; struct hostent *hptr; hptr = gethostbyname(domain); if (NULL == hptr) { printf("gethostbyname error for host:%s/n", domain); return -1; } for (pptr = hptr->h_addr_list; *pptr != NULL; pptr++) { if (NULL != inet_ntop(hptr->h_addrtype, *pptr, ip, INET_ADDRSTRLEN)) { return 0; // 只获取第一个 ip } } return -1; } // ip 合法性 bool isValidIP(const char *ipstr) { if (!ipstr) return false; int a, b, c, d; int tmp = sscanf(ipstr, "%d.%d.%d.%d", &a, &b, &c, &d); printf("tmp:%d\n", tmp); if (4 != tmp) return false; printf("inet_addr:%d,%d,%d,%d,%d\n", inet_addr(ipstr), a, b, c, d); if (!(0 > a || 255 < a || 0 > b || 255 < b || 0 > c || 255 < c || 0 > d || 255 < d) && INADDR_NONE != inet_addr(ipstr)) { return true; } return false; }
相关文章推荐
- linux shell 判断IP 是否合法
- 前端获取后台数据,前端根据获取的数据判断Repeater列是否显示或隐藏
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!!!
- 判断IP是否合法
- 根据二进制流判断上传文件类型是否合法(非扩展名)
- 面试题22:根据栈的压入序列,判断弹出序列是否合法
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!!!
- CheckBoxList 获取选择的内容和根据内容判断是否选择
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!!!
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断手机是否联网的方法)!
- delphi 域名转ip并判断ip是否可以联通
- 【UE4】【C++】判断是否撞击到物体、从蓝图中获取组件(炮管、炮塔)、根据瞄准的方向进行(角色)旋转
- Java 判断是否合法ip
- Android 判断网络是否可用、网络类型WIFI/2G/3G/4G及获取IP
- 获取服务器IP和判断是否是Guid
- 根据IP和子网掩码,判断ip是否属于子网
- C++:通过gethostbyname函数,根据服务器的域名,获取服务器IP
- php判断ip的地址是否合法
- php根据ip段以及子网掩码,判断某ip是否处于某子网下
- 合法IP、restore-ip-addresses、判断两个IP是否属于同一子网