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. android视频播放心得体会

    android视频播放主要是两种方式1.系统封装好的videoplayer,有前进.后退.暂停/播放.拉动最基本的功能,够一般使用,操作办法也很简单,如果需要自定义程度高就需要用到第二种方法:Surf ...

  2. javascript 递归之阶乘

    阶乘,即5! = 5*4*3*2*1, 先看传统的做法,利用while循环实现: function factorial(num){ var result = num; if(num<0){ re ...

  3. open_table与opened_table --2

    好多人在调优Mysql的时候,总是对open_tables和opend_tables两个参数分别不清. 网上好多解释都是这样的:open_tables:当前打开表的数量opened_tables:当前 ...

  4. Android Service 服务(一)—— Service .

    http://blog.csdn.net/ithomer/article/details/7364024 一. Service简介 Service是android 系统中的四大组件之一(Activit ...

  5. 如何在Linux桌面环境下自动启动程序?

    大多数Linux桌面环境有各自的图形用户界面(GUI),让用户可以配置针对特定用户的自动启动程序或服务.本文将介绍如何在各种Linux桌面环境下,自动启动某个程序的方法. AD:WOT2014:用户标 ...

  6. js之parentElement属性

    <html> <head> </head> <body> <form name="a "> <table name ...

  7. Java基础知识强化之网络编程笔记20:Android网络通信之 Android常用OAuth登录和分享

    1.  申请百度开发者账号及百度OAuth简介. (1)申请开发者账号: http://developer.baidu.com/ (2)创建项目: http://developer.baidu.com ...

  8. 学习jQuery后的部分总结

    1.remove和empty <div id="div1"> <ul id="ul1"> <li>嘿嘿</li> ...

  9. felx第二天 ActionScript 基本语法和关键字

    flex中使用的注解有两种分别是:// 和/**/ flex使用的关键字如图

  10. Spring 4 Ehcache Configuration Example with @Cacheable Annotation

    http://www.concretepage.com/spring-4/spring-4-ehcache-configuration-example-with-cacheable-annotatio ...