[php] DOstep do seriwsu z okreslonego IP

0

Witam.
Jak moge zrobic ze wpisuje na sztywno jakies adres IP
lub pule adresow np 121.0.0.* do 121.0.10.*
czy da sie tak zrobic ?

0

Adres kompa laczacego sie ze strona masz tu $_SERVER["REMOTE_ADDR"], wiec sprawdzasz czy sie zgadza z twoim jakims tam stalym IP. Jesli pula tych koncowek, to

$array = explode($_SERVER["REMOTE_ADDR"],".");
if($array[3]>0&&$array[3]<10) to puszczasz

Oczywiscie wczesniej sobie sprawdzasz, czy adres sieci jest zgodny z tym co chcesz.

pozdrawiam
johny

0

np:

<?php
$ip = $_SERVER['REMOTE_ADDR'];

$iplist = file('ips.php');
array_shift($iplist);

function trimit(&$w){
  $w = trim($w);
}

function rozdziel(&$w){
  $w = explode('-', $w);
  array_walk($w, 'trimit');
}

array_walk($iplist, 'rozdziel');

$ip = ip2long($ip);

$granted = false;

foreach($iplist as $w)
  $granted =
             ((count($w) == 1) && $ip == ip2long($w[0])) ||
             ((count($w) >= 2) && $ip >= ip2long($w[0]) && $ip <= ip2long($w[1])) ?
             true : $granted;

if( !$granted ){
  Header('HTTP/1.1 403 Forbidden');
  Die();
}

?>

potem do tego przykładu trzeba utworzyć plik ips.php o przykładowej treści:

<?php Die() ?>
120.0.0.1
121.0.0.1
122.0.0.1 - 122.0.0.255
0

Albo prosciej - regexpem:

<?php
$ipaddr = '127.0.0.*|255.255.*.120|';

if (preg_match('#' . str_replace('*', '.*', $ipaddr) . '#', getenv('REMOTE_ADDR') ) 
{
// ban
}
?>
  • nie testowane
0

tyle że konkretnego przedziału chyba się nie zrobi regexpem (??) np 1.1.1.5 - 1.1.3.20

1 użytkowników online, w tym zalogowanych: 0, gości: 1