"Локализация" сайта - запрет загрузки счетчиков с определенного диапазона IP - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются проблемы поисковой оптимизации и индексирования форумов.
Если зашли сюда случайно, пожалуйста, не оффтопьте и обратите внимание на другие разделы.
Оформление форумов, включая верстку скинов.
Настройка форумов, установка и администрирование.
Размещение рекламы на форумах.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены
Страница 1 из 1
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

"Локализация" сайта - запрет загрузки счетчиков с определенного диапазона IP

#1 Пользователь не на сайте   muslimgauze »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 509
  • Регистрация: 01-Май 10
  • Репутация: 6
  • IPB version:3.2.x
 

Отправлено 21 Сентябрь 2011 - 04:05

Возможна-ли такая "локализация" сайта, как запрет загрузки счетчиков (грубо говоря, внешних картинок), для посетителей с определенного диапазона IP?
Если у провайдера авария с инетом, то форум, доступный по локалке, начинает реально подтормаживать, по понятной причине.
Вот я и хочу, что бы для "локальных" юзеров грузилась только "локальная" часть сайта, без внешних ссылок :)
Возможно ли это как-то организовать?
0

#2 Пользователь не на сайте   Ritsuka »

 
 
  • Advanced
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 981
  • Регистрация: 08-Июнь 09
  • Репутация: 246
  • IPB version:3.2.x
 

Отправлено 21 Сентябрь 2011 - 18:13

Конечно, возможна.

Добавьте в initdata.php в начало что-то вроде:
function netmask_match ( $network , $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 );
  return ( $ip_long & $mask ) == ( $network_long & $mask );
}

$allowed_masks = array(
  '10.0.0.0/8',
  '192.168.0.0/16',
);

$match = false; $ip = $_SERVER['REMOTE_ADDR'];

foreach( $allowed_masks as $mask ) {
  if ( netmask_match ( $mask , $ip ) ) { $match = true; break; }
}

define('OUR_USER', $match);


Теперь в шаблонах можно везде, где требуется, опираться на условие:
<if test="OUR_USER">Привет пользователю нашей сети!</if>


или, например:
<if test="!OUR_USER">Код счетчика</if>

1

#3 Пользователь не на сайте   muslimgauze »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 509
  • Регистрация: 01-Май 10
  • Репутация: 6
  • IPB version:3.2.x
 

Отправлено 21 Сентябрь 2011 - 20:15

Просмотреть сообщениеRitsuka 21 Сентябрь 2011 - 18:13 сказал(а):

Конечно, возможна.

Добавьте в initdata.php в начало что-то вроде:
function netmask_match ( $network , $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 );
  return ( $ip_long & $mask ) == ( $network_long & $mask );
}

$allowed_masks = array(
  '10.0.0.0/8',
  '192.168.0.0/16',
);

$match = false; $ip = $_SERVER['REMOTE_ADDR'];

foreach( $allowed_masks as $mask ) {
  if ( netmask_match ( $mask , $ip ) ) { $match = true; break; }
}

define('OUR_USER', $match);


Теперь в шаблонах можно везде, где требуется, опираться на условие:
<if test="OUR_USER">Привет пользователю нашей сети!</if>


или, например:
<if test="!OUR_USER">Код счетчика</if>



гениально! ;)
0

#4 Пользователь не на сайте   muslimgauze »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 509
  • Регистрация: 01-Май 10
  • Репутация: 6
  • IPB version:3.2.x
 

Отправлено 24 Сентябрь 2011 - 09:52

Просмотреть сообщениеRitsuka 21 Сентябрь 2011 - 18:13 сказал(а):

Конечно, возможна.

Добавьте в initdata.php в начало что-то вроде:
function netmask_match ( $network , $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 );
  return ( $ip_long & $mask ) == ( $network_long & $mask );
}

$allowed_masks = array(
  '10.0.0.0/8',
  '192.168.0.0/16',
);

$match = false; $ip = $_SERVER['REMOTE_ADDR'];

foreach( $allowed_masks as $mask ) {
  if ( netmask_match ( $mask , $ip ) ) { $match = true; break; }
}

define('OUR_USER', $match);


Теперь в шаблонах можно везде, где требуется, опираться на условие:
<if test="OUR_USER">Привет пользователю нашей сети!</if>


или, например:
<if test="!OUR_USER">Код счетчика</if>




похоже, что не работает
прописал диапазоны, зашел на страницу, счетчики пропали
зашел через прокси и анонимайзеры - счетчики не вернулись!
0

#5 Пользователь не на сайте   Ritsuka »

 
 
  • Advanced
  • Смотреть галерею
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 981
  • Регистрация: 08-Июнь 09
  • Репутация: 246
  • IPB version:3.2.x
 

Отправлено 24 Сентябрь 2011 - 17:00

Выведите где-нибудь в подвале сайта блок:

Ваш IP: {$_SERVER['REMOTE_ADDR']}. <if test="OUR_USER">Вы из нашей сети<else />Вы не из нашей сети</if>


И проверьте работу по нему. Код тестировал. Возможно, вы как-то не так не задействовали прокси, или PHP получает неверный IP.
0

#6 Пользователь не на сайте   muslimgauze »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 509
  • Регистрация: 01-Май 10
  • Репутация: 6
  • IPB version:3.2.x
 

Отправлено 24 Сентябрь 2011 - 23:49

Просмотреть сообщениеRitsuka 24 Сентябрь 2011 - 17:00 сказал(а):

Выведите где-нибудь в подвале сайта блок:

Ваш IP: {$_SERVER['REMOTE_ADDR']}. <if test="OUR_USER">Вы из нашей сети<else />Вы не из нашей сети</if>


И проверьте работу по нему. Код тестировал. Возможно, вы как-то не так не задействовали прокси, или PHP получает неверный IP.


Блок работает верно - через проксЮ написал "вы не из нашей сети", да и в обоих случаях он вывел верный IP

скорее всего оно не понимало "!OUR_USER", так как последняя конструкция, с включенными внутрь счетчиками, принимается на ура! а до этого оно не работало по причине "анонимайзер превращал все ссылки в локальные от своего имени"

Сообщение изменено: muslimgauze (24 Сентябрь 2011 - 23:56)

0

Сообщить об этой теме:


Страница 1 из 1
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в этой теме

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Заказ дизайна форума

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.3 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2012 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна