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. Mysql之二

    MySQL的数据类型 SQL接口 标准: ANSI SQL:SQL-86--------SQL-89--------SQL-99---------SQL-03 数据类型 字符型: CHAR(不区分字母 ...

  2. 单独批次性任务采用MySQL定时器解决需求

    有时候我们在开发的时候会遇到一些需求是在某个固定的时间段实现某些特殊功能,只做一次或者有规律的每分钟一次每小时一次,那么这个时候我们可以启用MySQL的定时器来帮忙解决该问题. 比如,有一个场景是要求 ...

  3. flash Timer类使用

    var timer:Timer = new Timer(1000); timer.addEventListener("timer",tracerTimer); function t ...

  4. Java foreach操作(遍历)数组

    语法: 我们分别使用 for 和 foreach 语句来遍历数组 运行结果: 练习: import java.util.Arrays; public class HelloWorld { public ...

  5. mac ssh会话复制

    第一次登录服务器,需要输入账户.密码, 如果你需要重新开启另一个终端窗口,再次登录此服务器不需要输入账户.密码(类似免登).你只要让本地保存你的SSH会话即可. Mac 保持会话,需要在修改 ssh配 ...

  6. 多边形背景生成工具推荐-Trianglify

    前端开发whqet,csdn,王海庆,whqet,前端开发专家 low poly低多边形(相似于折纸的效果),多边形风格的设计应用越来越多,今天我们就来看一个利用d3.js写成的生成器Triangli ...

  7. C++文件读写(转载)

    原网页地址:http://blog.csdn.net/kingstar158/article/details/6859379 下文全部转载自以上网页,感谢原作者的贡献. 在看C++编程思想中,每个练习 ...

  8. mysql 源码调试方法

     http://blog.itpub.net/29254281/viewspace-1847415/ 其中吕海波老师分享的内容是 <调试Oracle二三例:调试技术在日常运维中的应用>其中 ...

  9. linux中的工具

    远程连接linux的工具: 命令行: SecureCRT   putty  XShell(商业环境付费) 图形界面:WinSCP SecureFX 远程连接window服务器工具: FileZilla ...

  10. Requirements

    Requirements The framework requirements are limited. PHP 5.5 or greater. Apache Web Server or equiva ...