Re: I.P. range authentication
| From: | Ernest E Vogelsinger | Date: | Tue, 18 Mar 2003 23:48:03 +0000 |
| Subject: | Re: I.P. range authentication | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-140222@lists.php.net to get a copy of this message | ||
At 23:04 18.03.2003, Will Bown said:
--------------------[snip]--------------------
>I am having trouble verifying if a user is within a specified I.P. range.
>The idea is that if a user is at a library within an I.P. range like
>231.55.*.* and their I.P. address is 231.55.122.226 a session would be
>registered for them. See my code below. This works but only for some I.P.'s
>in a range.
>
>Can anyone suggest a solution or resource that can help me?
>
>$sql = "select * from customers where ip1 <=\"$remote_address\" and ip2
>>=\"$remote_address\"";
>$sql_result = mysql_query($sql,$connection)
> or die("Couldn't execute query. AUTO SIGN IN SELECT");
>
>while ($row = mysql_fetch_array($sql_result)) {
> $ip1 = $row["ip1"];
> $ip2 = $row["ip2"];
> $fname = $row["fname"];
> $lname = $row["lname"];
> $institution = $row["institution"];
>
>$num = mysql_num_rows($sql_result);
>$sign_in="$fname $lname $institution";
>
>if($num>0){
> session_register("sign_in");
> }
>else{echo" you can't see this page"}
--------------------[snip]--------------------
You need to create a number out of the dotted IP string to use them in
valid <= and >= comparisons. This is a valid procedure, since the IP
basically _IS_ a number, it's just written in the dotted notation to aid us
miserable human beings.
$abytes = explode('.', $ip); // explode the IP string
$ip = 0;
foreach ($abytes as $byte) $ip = ($ip << 8) + $byte;
This will give you the valid numeric equivalent of the IP address.
--
>O Ernest E. Vogelsinger
(\) ICQ #13394035
^ http://www.vogelsinger.at/