function validateIp($ip) {
/*
Regex based on following list of bogons:
0.0.0.0/8
5.0.0.0/8
10.0.0.0/8
23.0.0.0/8
36.0.0.0/8
37.0.0.0/8
39.0.0.0/8
42.0.0.0/8
49.0.0.0/8
100.0.0.0/8
101.0.0.0/8
102.0.0.0/8
103.0.0.0/8
104.0.0.0/8
105.0.0.0/8
106.0.0.0/8
127.0.0.0/8
169.254.0.0/16
172.16.0.0/12
179.0.0.0/8
185.0.0.0/8
192.0.0.0/24
192.0.2.0/24
192.168.0.0/16
198.18.0.0/15
198.51.100.0/24
203.0.113.0/24
224.0.0.0/3
*/
$regex = '/^
(?:
0 |
5\. |
10\. |
23\. |
3[679]\. |
42 |
49 |
10[0-6] |
127 |
179 |
185 |
22[4-5] |
2(?:[34][0-9]|5[0-5]) |
169\.254 |
172\.(?:1[6-9]|[23][0-9])\. |
192\.0\.[02]\. |
192\.168\. |
198\.(?:1[89]|51)\. |
203\.0\.113
)
/x';
return preg_match(
'/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', $ip) == 1 &&
preg_match($regex, $ip) == 0;
}