Скриптик

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
drill
рядовой
Сообщения: 30
Зарегистрирован: 2008-05-07 19:42:18
Контактная информация:

Скриптик

Непрочитанное сообщение drill » 2008-12-01 16:16:56

Всем привет! Помогите пожалуйста скриптиком.
Нужно чтобы скриптик инклудил хтмлку из файла в страницу, если у юзера который пришёл на эту страницу IP-адрес любой, кроме 10.0.0.0 192.168.0.0.
Долго искал, но так и не осилил.
Спасибо!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

drill
рядовой
Сообщения: 30
Зарегистрирован: 2008-05-07 19:42:18
Контактная информация:

Re: Скриптик

Непрочитанное сообщение drill » 2008-12-01 18:01:27

всё-таки осилил.

вот что у меня получилось:

Код: Выделить всё

<?

function getip()
{
  if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"),"unknown"))
    $ip = getenv("HTTP_CLIENT_IP");

  elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
    $ip = getenv("HTTP_X_FORWARDED_FOR");

  elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
    $ip = getenv("REMOTE_ADDR");

  elseif (!empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
    $ip = $_SERVER['REMOTE_ADDR'];

  else
    $ip = "unknown";

  return($ip);
}

function ip_vs_net($ip,$network,$mask){
   if (((ip2long($ip))&(ip2long($mask)))==ip2long($network)){
       return 1;
   }else{
       return 0;
   }
}

$ipn = getip();

if (ip_vs_net("$ipn","10.0.0.0","255.0.0.0")){
    print "con<BR>";
} elseif (ip_vs_net("$ipn","72.16.0.0","255.255.0.0")){
    print "con<BR>";
} elseif (ip_vs_net("$ipn","192.168.0.0","255.255.255.0")){
    print "con<BR>";
} else {
    print "nocon<BR>";
}


?>

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скриптик

Непрочитанное сообщение zg » 2008-12-01 19:08:51

drill писал(а):(ip2long($ip))&(ip2long($mask)
в пхп нет беззнакового целого числа, поэтому всё не так радужно как бы тебе хотелось

Код: Выделить всё

var_dump(ip2long('127.255.255.255'));
var_dump(ip2long('128.0.0.0'));
---------------
int(2147483647)
int(-2147483648)
функцию ip2long не используют саму по себе, её используют вместе со sprintf

Код: Выделить всё

var_dump(sprintf('%u', ip2long('127.255.255.255')));
var_dump(sprintf('%u', ip2long('128.0.0.0')));
---------------
string(10) "2147483647"
string(10) "2147483648"
при этом данные получаются типа стринг и их нельзя подвергать бинарной конъюнкции

Ну это так, небольшой ликбез :smile:

drill
рядовой
Сообщения: 30
Зарегистрирован: 2008-05-07 19:42:18
Контактная информация:

Re: Скриптик

Непрочитанное сообщение drill » 2008-12-02 11:05:24

не совсем понял, мой скриптик работает или нет?
как сделать чтобы он работал правильно?
этот я составил из двух кусков других скриптов которые нашёл с помощью гугла

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скриптик

Непрочитанное сообщение zg » 2008-12-03 17:50:06

скажи, а чего тебе надо добиться?

drill
рядовой
Сообщения: 30
Зарегистрирован: 2008-05-07 19:42:18
Контактная информация:

Re: Скриптик

Непрочитанное сообщение drill » 2008-12-03 18:07:06

есть сайт, у которого 80% посетителей из сетки, и 20% из инета. Хочу повесить на сайт контекстную рекламу, но хочу показывать её только тем кто из инета. Тем кто из сетки рекламу показывать не хочу.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скриптик

Непрочитанное сообщение zg » 2008-12-03 18:21:11

гуд, ща чего-нить подмахнём :smile:

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скриптик

Непрочитанное сообщение zg » 2008-12-03 18:42:53

Код: Выделить всё

<?

function applyNetMask($ip, $mask)
{
	if ( is_string($ip  ) ) $ip   = ip2long($ip  );
	if ( is_string($mask) ) $mask = ip2long($mask);
	
	return long2ip(sprintf('%u', $ip & $mask));
}

function isLocalIp( $ip )
{
	if ( '192.168.0.0' === applyNetMask($ip, '255.255.0.0') ) return true;
	if ( '10.0.0.0'    === applyNetMask($ip, '255.0.0.0'  ) ) return true;
	if ( '127.0.0.0'   === applyNetMask($ip, '255.0.0.0'  ) ) return true;
	if ( '72.16.0.0'   === applyNetMask($ip, '255.255.0.0') ) return true;
	
	return false;
}

echo '<pre>';

echo '192.168.56.12 is ', isLocalIp('192.168.56.12') ? 'local' : 'world', PHP_EOL;
echo '127.123.41.21 is ', isLocalIp('127.123.41.21') ? 'local' : 'world', PHP_EOL;
echo '79.45.67.12   is ', isLocalIp('79.45.67.12'  ) ? 'local' : 'world', PHP_EOL;
echo '10.23.42.122  is ', isLocalIp('10.23.42.122' ) ? 'local' : 'world', PHP_EOL;

?>
-----------------------------------------
192.168.56.12 is local
127.123.41.21 is local
79.45.67.12   is world
10.23.42.122  is local
вроде пашет :smile:

drill
рядовой
Сообщения: 30
Зарегистрирован: 2008-05-07 19:42:18
Контактная информация:

Re: Скриптик

Непрочитанное сообщение drill » 2008-12-03 18:59:21

и правда работает, примного благодарен!
СПАСИБО!

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скриптик

Непрочитанное сообщение zg » 2008-12-03 20:07:06

Гм... даж статью небольшую накидал, чтоб не потерять -))) http://anton-pribora.ru/articles/php-net-mask/

хотя там инфы, по идее, вагон и маленькая тедежка с этими ip

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Скриптик

Непрочитанное сообщение Alex Keda » 2008-12-03 22:49:29

zg писал(а):Гм... даж статью небольшую накидал, чтоб не потерять -))) http://anton-pribora.ru/articles/php-net-mask/

хотя там инфы, по идее, вагон и маленькая тедежка с этими ip
а я на php.net в камментах функцию нашёл...
немного универсальней:

Код: Выделить всё

function net_match($network, $ip) {
      // determines if a network in the form of 192.168.17.1/16 or
      // 127.0.0.1/255.255.255.255 or 10.0.0.1 matches a given ip
      $ip_arr = explode('/', $network);
      $network_long = ip2long($ip_arr[0]);

      $x = ip2long($ip_arr[1]);
      $mask =  long2ip($x) == $ip_arr[1] ? $x : 0xffffffff << (32 - $ip_arr[1]);
      $ip_long = ip2long($ip);

      // echo ">".$ip_arr[1]."> ".decbin($mask)."\n";
      return ($ip_long & $mask) == ($network_long & $mask);
}
Убей их всех! Бог потом рассортирует...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Скриптик

Непрочитанное сообщение zg » 2008-12-03 23:29:41

lissyara писал(а):long2ip($x) == $ip_arr[1] ?
жестоко... -))) но если маска будет больше 32, то будет фигня.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Скриптик

Непрочитанное сообщение Alex Keda » 2008-12-04 0:49:39

когда будет - тогад перепишется.
на данный момент я живьём их не видел, хотя по слухам на каналах уже внедряют....
Убей их всех! Бог потом рассортирует...