Related Articles

# Program to validate an IP address

• Difficulty Level : Medium
• Last Updated : 09 Nov, 2020

Write a program to Validate an IPv4 Address.
According to Wikipedia, IPv4 addresses are canonically represented in dot-decimal notation, which consists of four decimal numbers, each ranging from 0 to 255, separated by dots, e.g., 172.16.254.1

Following are steps to check whether a given string is a valid IPv4 address or not:

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

## C++

 `// Program to check if a given``// string is valid IPv4 address or not``#include ``using` `namespace` `std;``#define DELIM "."` `/* function to check whether the``   ``string passed is valid or not */``bool` `valid_part(``char``* s)``{``    ``int` `n = ``strlen``(s);``    ` `    ``// if length of passed string is``    ``// more than 3 then it is not valid``    ``if` `(n > 3)``        ``return` `false``;``    ` `    ``// check if the string only contains digits``    ``// if not then return false``    ``for` `(``int` `i = 0; i < n; i++)``        ``if` `((s[i] >= ``'0'` `&& s[i] <= ``'9'``) == ``false``)``            ``return` `false``;``    ``string str(s);``    ` `    ``// if the string is "00" or "001" or``    ``// "05" etc then it is not valid``    ``if` `(str.find(``'0'``) == 0 && n > 1)``        ``return` `false``;``    ``stringstream geek(str);``    ``int` `x;``    ``geek >> x;``    ` `    ``// the string is valid if the number``    ``// generated is between 0 to 255``    ``return` `(x >= 0 && x <= 255);``}` `/* return 1 if IP string is``valid, else return 0 */``int` `is_valid_ip(``char``* ip_str)``{``    ``// if empty string then return false``    ``if` `(ip_str == NULL)``        ``return` `0;``    ``int` `i, num, dots = 0;``    ``int` `len = ``strlen``(ip_str);``    ``int` `count = 0;``    ` `    ``// the number dots in the original``    ``// string should be 3``    ``// for it to be valid``    ``for` `(``int` `i = 0; i < len; i++)``        ``if` `(ip_str[i] == ``'.'``)``            ``count++;``    ``if` `(count != 3)``        ``return` `false``;``    ` `    ``// See following link for strtok()``  ` `    ``char` `*ptr = ``strtok``(ip_str, DELIM);``    ``if` `(ptr == NULL)``        ``return` `0;` `    ``while` `(ptr) {` `        ``/* after parsing string, it must be valid */``        ``if` `(valid_part(ptr))``        ``{``            ``/* parse remaining string */``            ``ptr = ``strtok``(NULL, ``"."``);``            ``if` `(ptr != NULL)``                ``++dots;``        ``}``        ``else``            ``return` `0;``    ``}` `    ``/* valid IP string must contain 3 dots */``    ``// this is for the cases such as 1...1 where``    ``// originally the no. of dots is three but``    ``// after iteration of the string we find``    ``// it is not valid``    ``if` `(dots != 3)``        ``return` `0;``    ``return` `1;``}` `// Driver code``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_ip(ip1) ? cout<<``"Valid\n"` `: cout<<``"Not valid\n"``;``    ``is_valid_ip(ip2) ? cout<<``"Valid\n"` `: cout<<``"Not valid\n"``;``    ``is_valid_ip(ip3) ? cout<<``"Valid\n"` `: cout<<``"Not valid\n"``;``    ``is_valid_ip(ip4) ? cout<<``"Valid\n"` `: cout<<``"Not valid\n"``;``    ``return` `0;``}`
Output
```Valid
Valid
Not valid
Not valid
```