форум vBSupport.ru > vBSupport.ru > Гурушник > Кодер
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
kerk
k0t
 
kerk's Avatar
Default Мелкие полезности
7

Нужна была функция фильтра IP клиента по:
  1. заданному диапазону IP адресов
  2. точное совпадение заданного IP с IP клиента
  3. по части IP адреса
Порылся на php.net и нашел что то подобное, но не совсем отвечающее моим требованиям =)
в вобле такого не нашел
немного допилил найденную на php.net и получилась такая функция
PHP Code:
/*
* Verified IP or NetRange with user/client IP Address
* returned values:
***** TRUE *****
* 1 - Match exact IP
* 2 - Match first 3 blocks of IP's
* 3 - IP in the NetRange
***** FALSE *****
* -1 - Invalid IP NetRange
* -2 - Invalid IP or NetRange
* -3 - Not in the NetRange
*/
function kr_verify_client_ip($ip_range$ip_address IPADDRESS)
{
      
$length 1;
      
// IP NetRange
      
if(preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.*\-.*\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$ip_range$matches))
      {
            if(
$matches[1])
            {
                  
$ip_range array_map('trim'explode('-'$matches[1]));
            }
            unset(
$matches);
      }
      
// IP Address
      
else if(preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$ip_range$matches))
      {
            if(
$matches[1])
            {
                  
$ip_range array_map('trim', array($matches[1]));
            }
            unset(
$matches);
      }else{
            
// Invalid IP Address or IP NetRange
            
return -1;
      }
      
// Verify IP Address
      
if(preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$ip_address$matches))
      {
            if(
$matches[1])
            {
                  
$ip_address trim($matches[1]);
            }
            unset(
$matches);
      }else{
            
// Invalid given IP Address, use vB constant
            
$ip_address IPADDRESS;
      }

      
// IP Range invalid, use exact IP or first 3 blocks of IP to compare
      
if(count($ip_range) <> 2)
      {
            
$ip_range_part implode('.'array_slice(explode('.'$ip_range[0]), 0$length));
            
$ip_address_part implode('.'array_slice(explode('.'$ip_address), 0$length));
            
// Compare exact IP
            
if(ip2long($ip_range[0]) == ip2long($ip_address))
            {
                  return 
1;
            }
            
// Compare first 3 blocks of IP
            
else if(ip2long($ip_range_part) == ip2long($ip_address_part))
            {
                  return 
2;
            }
            
// Not match IP or not in the NetRange
            
return -2;
      }else{
            
$ip_range_start ip2long($ip_range[0]);
            
$ip_range_end ip2long($ip_range[1]);
            
$ip_long ip2long($ip_address);
            if(
$ip_long >= $ip_range_start AND $ip_long <= $ip_range_end)
            {
                  return 
3;
            }
            
// Not In the Range
            
return -3;
      }
      
// it will never happen =)
      
return 0;

Требования
внутри кода vBulletin, где доступны константы движка
или дописать в начало функции
PHP Code:
      if(!defined('IPADDRESS'))
      {
            
define('IPADDRESS'$_SERVER['REMOTE_ADDR']);
      } 
Использование
PHP Code:
$ret kr_verify_client_ip('127.0.0.1''127.0.0.1');
print 
$ret;// return value 1
$ret kr_verify_client_ip('127.0.0.0''127.0.0.1');
print 
$ret;// return value 2
$ret kr_verify_client_ip('127.0.0.0 - 127.255.255.255');
print 
$ret;// return value 3
$ret kr_verify_client_ip('127.0 - 127.255''127.0.0.1');
print 
$ret;// return value -1
$ret kr_verify_client_ip('127.0 - 127.255.255.255');
print 
$ret;// return value -2
$ret kr_verify_client_ip('127.0.0.0 - 127.255.255.255''177.254.255.255');
print 
$ret;// return value -3 
наверное будет полезно хакописателям для проверки IP или диапазона IP-шников
====
у вас есть свои наработки?
небольшие полезные функции, классы...
поделитесь?
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default
5

Суть функции: проверка файлов антивирусником Dr.Web
Отправка файла POST запросом.

PHP Code:
# Использовать так:
# av_check('/path/file.doc', 'filename');
#
# Типы ответов:
# 'ERROR' - Ошибка отправки файлов
# 'CLEAN' - Файл не содержит вредоносный код.
# 'INFECTED' - Файл заражен.

function av_check($filePath$fileName)
{
  
define("CRLF""\r\n");
  
define("DCRLF"CRLF.CRLF);

  
$boundary "---------------------".substr(md5(rand(0,32000)),0,10);

  
$fieldsData "";

  
$fileHeaders "--".$boundary.CRLF;
  
$fileHeaders .= "Content-Disposition: form-data; name=\"file\"; filename=\"".$fileName."\"".CRLF;
  
$fileHeaders .= "Content-Type: ".mime_content_type($filePath).DCRLF;
  
$fileHeadersTail CRLF."--".$boundary."--".CRLF;

  
$filesize filesize($filePath);
  
$contentLength strlen($fieldsData) + strlen($fileHeaders) + $filesize strlen($fileHeadersTail);

  
$headers  "POST http://online.drweb.com/result/ HTTP/1.0".CRLF;
  
$headers .= "Host: online.drweb.com".CRLF;
  
$headers .= "Referer: online.drweb.com".CRLF;
  
$headers .= "Content-type: multipart/form-data, boundary=".$boundary.CRLF;
  
$headers .= "Content-length: ".$contentLength.DCRLF;
  
$headers .= $fieldsData;
  
$headers .= $fileHeaders;

  if(!
$fp fsockopen('online.drweb.com'80)) return false;
  
fputs($fp$headers);

  
$fp2 fopen($filePath"rb");

  while(!
feof($fp2)) fputs($fpfgets($fp21024*100));

  
fclose($fp2);

  
fputs($fp$fileHeadersTail);

  
$serverResponse "";
  while(!
feof($fp)) $serverResponse .= fgets($fp4096);
  
fclose($fp);
  
preg_match('<!-- X_SCAN_STATE: (.*) -->'$serverResponse$return);
  echo 
$return[1];


Last edited by StenLi : 01-08-2013 at 11:50 AM.
 
 
kerk
k0t
 
kerk's Avatar
Default
0

ну а почему нет?
 
 
kerk
k0t
 
kerk's Avatar
Default
0

чуть подрихтовал код функции
вместо циклов foreach(), код в одну строку
 
 
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default
0

kerk, Было бы неплохо добавить проверку на прокси))

PS. или я не правильно понял применение.
 
 
kerk
k0t
 
kerk's Avatar
Default
1

применение простое
можно использовать заданные значения диапазонов IP из БД к примеру
структура таблицы
Code:
-----------------------------------------
id     | IpStart   | IpEnd
-------+------------+--------------------
1      |127.0.0.0  |127.255.255.255
-------+---------------------------------
или из файла данных диапазонов
или из настроек
не суть...
в первый аргумент функции, передаешь диапазон IP (который ты знаешь), второй аргумент если не указать, будет использован ИП клиента/узера
проверяешь, ИП узера, если он в указанном диапазоне, пропускаешь, нет, отлуп

если передавать и второй аргумент, то функцию можно использовать для проверки каких то своих данных или отладки (см. описание ф-ии)
как дополнение можно использовать простой кусок кода для запроса диапазона, по IP клиента
PHP Code:
$ip_addr '127.0.0.1'// или IPADDRESS
$fc file_get_contents('http://who.is/whois-ip/ip-address/' $ip_addr);
$ip_range '';
if(
preg_match("#(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} - \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})#s"$fc$matches))
{
      
//print_r($matches);
      
if($matches[1])
      {
            
$ip_range $matches[1];
      }
      unset(
$fc);
}
print 
'<hr />';
print 
$ip_addr " In the NetRange: " $ip_range;
print 
'<hr />';
if(
$ip_range AND $ret kr_verify_client_ip($ip_range$ip_addr))
{
      print 
'OK ' $ret;

код вернет примерно следующее
Code:
127.0.0.1 In the NetRange: 127.0.0.0 - 127.255.255.255
OK 3
ну и там еще пара вариантов есть
 
 
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default
4

Сегодня понадобилось убрать нечесть в мобильных номерах типа.
Пользователи у меня любят в обьявлениях писать что-то типа: 8-906-0-6шесть6-300.
Накидал небольшую функцию.
Код быдловат, но на больше времени не хватило.
PS. Для Российских мобильных операторов.

PHP Code:
<?PHP
/*
Функция преобразования и проверки кривых мобильных номеров.
Делает из такого: 8-908-0-6шесть6-300
Использовать так: st_mobile_validate('8-906-0-6шесть6-300')
*/
function st_mobile_validate($number){

    
$m_validate_base = array(
        
"один"=>"1","два"=>"2","три"=>"3","четыре"=>"4",
        
"пять"=>"5","шесть"=>"6","семь"=>"7","восемь"=>"8","девять"=>"9",
        
"адин"=>"1","четыри"=>"4","читире"=>"4","читири"=>"4","восимь"=>"8",
        
"девить"=>"9","десять"=>"10","десить"=>"10","раз"=>"1","ноль"=>"0","("=>"",
        
"о"=>"0",")"=>""," "=>"","-"=>"","_"=>"","+7"=>"",
    );
// База кеев для проверки.

    
$number strtr($number,$m_validate_base);
    if(
$number[0] != '8'){ // Проверяем что есть первая восьмерка
        
$number '8'.$number;
    }
    if (
preg_match("!((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,11}!"$number)) { // Регулярка проверка номера
    
return $number;
    }
}

?>

Last edited by StenLi : 01-15-2013 at 01:12 AM.
 
 
Luvilla
Гость
Default

Оффтоп
 
 
kerk
k0t
 
kerk's Avatar
Default
0

вариантов написания цифры буквами может быть множество, в том числе и смесь ру/англ букв
так что массив наверное должен быть более объемный и немного с другой структурой
нечтовроде этого
PHP Code:
$array = array(
    
=> array('один''адын''адин'),
    
=> array('два''дфа'),
    
=> array('три''three')
); 
в регулярке проверять строку из массива на совпадения и если найдено, возвращать соотв. цифру, иначе ноль
 
 
StenLi
На доске почёта
Пожизненный блэк
 
banned nax
Default
0

Quote:
Originally Posted by kerk View Post
вариантов написания цифры буквами может быть множество, в том числе и смесь ру/англ букв
так что массив наверное должен быть более объемный и немного с другой структурой
нечтовроде этого
У меня 12106 из ~ 14000 сошлось, учитывая все погрешности и отсутствия - это 98-99% нужных мне записей в бд.

Quote:
Originally Posted by kerk View Post
PHP Code:
$array = array(
 
=> array('один''адын''адин'),
 
=> array('два''дфа'),
 
=> array('три''three')
); 
Не вопрос, можно. Но через чур, да и время было ограниченное.

Quote:
Originally Posted by Luvilla View Post
в очередной раз испытала гордость! Велик русский язык, воистину....
и это ж таки не все возможные варианты....
Самое интересное, я как обычно сначала все сделал, потом уже накидал функцию, чтобы сюда выкинуть.
Забыл внести в массив фразу "нуль", которая по
PHP Code:
LIKE '%нуль%' 
встретилась > 50 раз.

Шифруются люди, не хотят видимо спам получать, НО новые правила на ресурсе заказчика - есть новые правила на ресурсе заказчика.


PS. Меня поразил гугл:
_http://eng5.ru/translator/numbers
_http://eng5.ru/words/english_numbers

Особенно линк __http://eng5.ru/table/numbers_1_1000
Ведь если взять все эти букво-цифры еще с падонским и ошибками, то массив получится больше чем на 3000-4000 значений.

Last edited by StenLi : 01-15-2013 at 02:00 AM.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 08:25 PM.


Powered by vBulletin® Version 3.5.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.