Skip to content
Snippets Groups Projects
Commit dc14c6d1 authored by Guy Brand's avatar Guy Brand
Browse files

Fix IPv4 regexp and add IPv6 regexp (clientIP)

darcs-hash:20081012192728-19e2d-5219ad7bf461a758b62ee311598937ecd958916b.gz
parent cddd152c
No related branches found
No related tags found
No related merge requests found
...@@ -594,11 +594,31 @@ function clientIP($single=false){ ...@@ -594,11 +594,31 @@ function clientIP($single=false){
if(!empty($_SERVER['HTTP_X_REAL_IP'])) if(!empty($_SERVER['HTTP_X_REAL_IP']))
$ip = array_merge($ip,explode(',',$_SERVER['HTTP_X_REAL_IP'])); $ip = array_merge($ip,explode(',',$_SERVER['HTTP_X_REAL_IP']));
// some IPv4/v6 regexps borrowed from Feyd
// see: http://forums.devnetwork.net/viewtopic.php?f=38&t=53479
$dec_octet = '(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[0-9])';
$hex_digit = '[A-Fa-f0-9]';
$h16 = "{$hex_digit}{1,4}";
$IPv4Address = "$dec_octet\\.$dec_octet\\.$dec_octet\\.$dec_octet";
$ls32 = "(?:$h16:$h16|$IPv4Address)";
$IPv6Address =
"(?:(?:{$IPv4Address})|(?:".
"(?:$h16:){6}$ls32" .
"|::(?:$h16:){5}$ls32" .
"|(?:$h16)?::(?:$h16:){4}$ls32" .
"|(?:(?:$h16:){0,1}$h16)?::(?:$h16:){3}$ls32" .
"|(?:(?:$h16:){0,2}$h16)?::(?:$h16:){2}$ls32" .
"|(?:(?:$h16:){0,3}$h16)?::(?:$h16:){1}$ls32" .
"|(?:(?:$h16:){0,4}$h16)?::$ls32" .
"|(?:(?:$h16:){0,5}$h16)?::$h16" .
"|(?:(?:$h16:){0,6}$h16)?::" .
")(?:\\/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))?)";
// remove any non-IP stuff // remove any non-IP stuff
$cnt = count($ip); $cnt = count($ip);
$match = array(); $match = array();
for($i=0; $i<$cnt; $i++){ for($i=0; $i<$cnt; $i++){
if(preg_match('/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/',$ip[$i],$match)) { if(preg_match("/^$IPv4Address$/",$ip[$i],$match) || preg_match("/^$IPv6Address$/",$ip[$i],$match)) {
$ip[$i] = $match[0]; $ip[$i] = $match[0];
} else { } else {
$ip[$i] = ''; $ip[$i] = '';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment