1、Determine if a string is a valid IP address in C

Beej's Guide to Network Programming

2、9.14. inet_ntop(), inet_pton()

3、Program to validate an IP address

step 1) Parse string with “.” as delimiter using “strtok()” function.
e.g. ptr = strtok(str, DELIM); step 2)
……..a) If ptr contains any character which is not digit then return 0
……..b) Convert “ptr” to decimal number say ‘NUM’
……..c) If NUM is not in range of 0-255 return 0
……..d) If NUM is in range of 0-255 and ptr is non-NULL increment “dot_counter” by 1
……..e) if ptr is NULL goto step 3 else goto step 1 step 3) if dot_counter != 3 return 0 else return 1.

方法Ⅰ

// Program to check if a given string is valid IPv4 address or not
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define DELIM "." /* return 1 if string contain only digits, else return 0 */
int valid_digit(char *ip_str)
{
while (*ip_str) {
if (*ip_str >= '0' && *ip_str <= '9')
++ip_str;
else
return 0;
}
return 1;
} /* return 1 if IP string is valid, else return 0 */
/* Check whether ip_address conforms to xxx.xxx.xxx.xxx, and there are 3 dots/'.' */
/* 暫時只能檢查符合常規IP地址的字符串,比如192.168.3.100, 如果是 8、192.167.8等這種非常規的,則處理不了。 */
int is_valid_IPV4(char * ip_str)
{
int i, num, dots = 0;
char *ptr; if(ip_str == NULL)
return 0; // 15+1 can't be replace by sizeof(ip_str), as the sizeof(*ip_str) is 4.
char *tmpstr = (char *)malloc(15+1);
memset(tmpstr, 0, sizeof(tmpstr));
memcpy(tmpstr, ip_str, 15);
printf("tmpstr is %s\n", tmpstr); // See following link for strtok()
// http://pubs.opengroup.org/onlinepubs/009695399/functions/strtok_r.html
//ptr = strtok(ip_str, DELIM);
ptr = strtok(tmpstr, DELIM); if (ptr == NULL){
free(tmpstr);
return 0;
} while (ptr) { /* after parsing string, it must contain only digits */
if (!valid_digit(ptr)){
free(tmpstr);
return 0;
} num = atoi(ptr); /* check for valid IP */
if (num >= 0 && num <= 255) {
/* parse remaining string */
ptr = strtok(NULL, DELIM);
if (ptr != NULL)
++dots;
} else{
free(tmpstr);
return 0;
}
} /* valid IP string must contain 3 dots */
if (dots != 3){
free(tmpstr);
return 0;
} free(tmpstr);
return 1;
} // Driver program to test above functions
int main()
{
char ip1[] = "128.0.0.1";
char ip2[] = "125.16.100.1";
char ip3[] = "125.512.100.1";
char ip4[] = "125.512.100.abc";
is_valid_IPV4(ip1)? printf("Valid\n"): printf("Not valid\n");
is_valid_IPV4(ip2)? printf("Valid\n"): printf("Not valid\n");
is_valid_IPV4(ip3)? printf("Valid\n"): printf("Not valid\n");
is_valid_IPV4(ip4)? printf("Valid\n"): printf("Not valid\n"); printf("ip4 is %s\n", ip4);
return 0;
}

結果是:

Valid
Valid
Not Valid
Not Valid

方法Ⅱ

#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int isValidIpAddress(char *ipAddress)
{
struct sockaddr_in sa;
/* 函數 inet_pton會同時將 ipAddress複製到 函數的第3個參數上區,格式爲 struct sock_addr_in* */
int result = inet_pton(AF_INET, ipAddress, &(sa.sin_addr)); return result != 0;
} void main()
{
char ip1[]="192.168.3.1";
char ip2[]="192.168.3.a";
char ip3[]="192.168.3";
isValidIpAddress(ip1) ? printf("Valid\n"): printf("Not valid\n");
isValidIpAddress(ip2) ? printf("Valid\n"): printf("Not valid\n");
isValidIpAddress(ip3) ? printf("Valid\n"): printf("Not valid\n"); return;
}

結果是:

Valid
Not Valid
Not Valid

IP address/地址 检查的更多相关文章

  1. 华东师大OJ:IP Address【IP地址转换】

    /*===================================== IP Address Time Limit:1000MS Memory Limit:30000KB Total Subm ...

  2. [Swift]LeetCode468. 验证IP地址 | Validate IP Address

    Write a function to check whether an input string is a valid IPv4 address or IPv6 address or neither ...

  3. lwip IP address handling 关于 IP 地址的 操作 API接口

    lwip 2.0.3  IP address handling /** * @file * IP address API (common IPv4 and IPv6) */ 1.u32_t ipadd ...

  4. [Leetcode] restore ip address 存储IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  5. How to configure a static IP address on CentOS 7(CentOS7静态IP地址设置)

    Question: On CentOS 7, I want to switch from DHCP to static IP address configuration with one of my ...

  6. [LintCode] Restore IP Address 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  7. LeetCode 1108. Defanging an IP Address (IP 地址无效化)

    题目标签:String 题目给了我们一组 ip address,让我们把 . 变成 [.],这题可以用replace,但是这样做的话,好像没意义了.所以还是走一下array,具体看code. Java ...

  8. C#调用百度高精度IP定位API通过IP获取地址

    API首页:http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 1.申请百度账号,创建应用,获取密钥(AK) http://lbsyu ...

  9. MySQL [Warning]: IP address 'xxxx' could not be resolved: Name or service not known

    MySQL的error log 出现大量的 DNS反解析错误. DNS解析是指,将 域名解析成ip地址: DNS反解析是指,将IP地址反解析成域名: Version: MySQL Community ...

随机推荐

  1. Visual Studio 2012 应用软件开发新方式

    微软正式发布Visual Studio 2012 应用软件开发新方式 2012-09-13 09:54 51CTO.com 我要评论(0) 字号:T | T “现在,开发者将有更好的机会开发与云服务连 ...

  2. 封装的多功能多效果的RecyclerView

    开源界有一句很有名的话叫"不要重复发明轮子",当然,我今天的观点不是要反驳这句话,轮子理论给我们的开发带来了极大的便利,.但我想说的是,既要会用轮子,也要知道轮子怎么造,必要的时候 ...

  3. iOS开发-控件设置

    一.用户界面控件共有三种基本模式:动态.静态(非动态)和被动 动态:点击它们时会发生事情——通常是出发一段自己编写的时间代码. 被动:仅用于存储用户输入的值,以备后续使用.这些控件不会触发任何操作方法 ...

  4. HDU4632:Palindrome subsequence(区间DP)

    Problem Description In mathematics, a subsequence is a sequence that can be derived from another seq ...

  5. 3DES一些说明

    3DES:是在DES的基础上采用三重DES,即用两个56位的密钥K1,K2,发送方用K1加密,K2解密,再使用K1加密.接收方使用K1解密,K2加密,再使用K1解密, 3DES实现: 主要有CBC,E ...

  6. 什么是IDOC,以及IDOC的步骤

    创建IDOC:   第一步:WE31 创建IDOC所包含的字段.   第二步:WE30 创建IDOC 把Segment分配给IDOC   第三步:WE81  创建信息类型   第四步:WE82   把 ...

  7. 获取用户ip接口

    <script type="text/javascript" charset="gb2312" src="http://counter.sina ...

  8. 面试题总结之C/C++/MISC

    C C pointer,指向数据结构与指向char的指针有区别吗 它们正做+1运算时产生的位移不同 分配在堆的内存与分配在堆栈的内存有什么不同 分配在堆的内存要手动去释放 C structure,数据 ...

  9. PAT 1015

    1015. Reversible Primes (20) A reversible prime in any number system is a prime whose "reverse& ...

  10. Java自学成长路线(转载)

    JAVA自学之路 一:学会选择  决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等.  JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅 ...