Меню
Главная
Форумы
Новые сообщения
Что нового?
Новые сообщения
Вход
Регистрация
Что нового?
Новые сообщения
Меню
Вход
Регистрация
Соцсети заблокировали! Простой способ обхода блокировки Twitter и Facebook
здесь
-----
Форум блокируют за
антивоенную статью
-----
В связи с преследованиями за инакомыслие, теперь можно
анонимно
отвечать в темах.
-----
Обновлен
скрипт для определения IP госорганов
-----
Наш реестр запрещенных сайтов
с широким функционалом.
Создаем свой генератор зеркал
для обхода блокировки.
Главная
Форумы
Противодействие интернет-цензуре
Препятствуем блокировке сайта
Роскомсос - скрипт для определения IP госорганов
JavaScript отключён. Чтобы полноценно использовать наш сайт, включите JavaScript в своём браузере.
Ответить в теме
Сообщение
<p>[QUOTE="netcenzure222, post: 4608, member: 362"]</p><p>А если я туда запишу "666.666.666.666"? <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="smilie smilie--sprite smilie--sprite7" alt=":p" title="Stick Out Tongue :p" data-shortname=":p" /></p><p>Если уж брать ip, то из HTTP_CF_CONNECTING_IP, предварительно проверив, что запрос исходит от их сервера:</p><p></p><p>[PHP]if (isset($_SERVER['HTTP_CF_CONNECTING_IP']) and filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP)) {</p><p> $memcacheD = new Memcached;</p><p> $memcacheD->addServer('localhost', 11211);</p><p></p><p> $cfips = $memcacheD->get('cloudflare_iplist');</p><p> if(empty($cfips)){</p><p> $c = file_get_contents('https://www.cloudflare.com/ips-v4');</p><p> $cfips = preg_split("#[\r\n]+#u", $c);</p><p> if(!empty($cfips)){</p><p> $memcacheD->set('cloudflare_iplist', $cfips, 3600 * 4);</p><p> }</p><p> }</p><p></p><p> if(!empty($cfips)){</p><p> foreach($cfips as $range){</p><p> if(cidr_match($_SERVER['REMOTE_ADDR'], $range)){ // если ip принадлежит CloudFlare</p><p> $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];</p><p> break;</p><p> }</p><p> }</p><p> }</p><p>}[/PHP]</p><p></p><p>Подразумевается, что Memcached установлен, если хостинг не позволяет его активировать, тогда кэш придётся держать на диске. Писал на скорую руку, конечно же</p><p>надо заменить file_get_contents на curl и сделать обработку исключений, но это уже каждый сам пусть допиливает для себя.</p><p></p><p>Чуть не забыл, cidr_match с небольшими поправками:</p><p></p><p>[PHP]function cidr_match($ip, $range)</p><p>{</p><p> $e = explode('/', $range);</p><p> if (empty($e[1])) {</p><p> if ($ip === $range) { // если указан один ip, а не диапазон</p><p> return true;</p><p> }</p><p> </p><p> $ips = explode('-', $range);</p><p> if(!empty($ips[1])){ // если диапазон</p><p> $ip_long = sprintf("%u", ip2long($ip));</p><p> $ip_long_start = sprintf("%u", ip2long($ips[0]));</p><p> $ip_long_end = sprintf("%u", ip2long($ips[1]));</p><p> return ($ip_long >= $ip_long_start and $ip_long <= $ip_long_end);</p><p> }</p><p> } else { // если CIDR</p><p> list ($subnet, $bits) = $e;</p><p> $ip_long = ip2long($ip);</p><p> $subnet = ip2long($subnet);</p><p> $mask = -1 << (32 - $bits);</p><p> $subnet &= $mask;</p><p> return ($ip_long & $mask) == $subnet;</p><p> }</p><p> return false;</p><p>}[/PHP]</p><p>[/QUOTE]</p>
[QUOTE="netcenzure222, post: 4608, member: 362"] А если я туда запишу "666.666.666.666"? :p Если уж брать ip, то из HTTP_CF_CONNECTING_IP, предварительно проверив, что запрос исходит от их сервера: [PHP]if (isset($_SERVER['HTTP_CF_CONNECTING_IP']) and filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP)) { $memcacheD = new Memcached; $memcacheD->addServer('localhost', 11211); $cfips = $memcacheD->get('cloudflare_iplist'); if(empty($cfips)){ $c = file_get_contents('https://www.cloudflare.com/ips-v4'); $cfips = preg_split("#[\r\n]+#u", $c); if(!empty($cfips)){ $memcacheD->set('cloudflare_iplist', $cfips, 3600 * 4); } } if(!empty($cfips)){ foreach($cfips as $range){ if(cidr_match($_SERVER['REMOTE_ADDR'], $range)){ // если ip принадлежит CloudFlare $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; break; } } } }[/PHP] Подразумевается, что Memcached установлен, если хостинг не позволяет его активировать, тогда кэш придётся держать на диске. Писал на скорую руку, конечно же надо заменить file_get_contents на curl и сделать обработку исключений, но это уже каждый сам пусть допиливает для себя. Чуть не забыл, cidr_match с небольшими поправками: [PHP]function cidr_match($ip, $range) { $e = explode('/', $range); if (empty($e[1])) { if ($ip === $range) { // если указан один ip, а не диапазон return true; } $ips = explode('-', $range); if(!empty($ips[1])){ // если диапазон $ip_long = sprintf("%u", ip2long($ip)); $ip_long_start = sprintf("%u", ip2long($ips[0])); $ip_long_end = sprintf("%u", ip2long($ips[1])); return ($ip_long >= $ip_long_start and $ip_long <= $ip_long_end); } } else { // если CIDR list ($subnet, $bits) = $e; $ip_long = ip2long($ip); $subnet = ip2long($subnet); $mask = -1 << (32 - $bits); $subnet &= $mask; return ($ip_long & $mask) == $subnet; } return false; }[/PHP] [/QUOTE]
Предпросмотр
Имя
Проверка
Ответить
Главная
Форумы
Противодействие интернет-цензуре
Препятствуем блокировке сайта
Роскомсос - скрипт для определения IP госорганов
Сверху