VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Порылся на 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, 4 - $length));
$ip_address_part = implode('.', array_slice(explode('.', $ip_address), 0, 4 - $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, где доступны константы движка
или дописать в начало функции
$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-шников
====
у вас есть свои наработки?
небольшие полезные функции, классы...
поделитесь?
или из файла данных диапазонов
или из настроек
не суть...
в первый аргумент функции, передаешь диапазон IP (который ты знаешь), второй аргумент если не указать, будет использован ИП клиента/узера
проверяешь, ИП узера, если он в указанном диапазоне, пропускаешь, нет, отлуп
если передавать и второй аргумент, то функцию можно использовать для проверки каких то своих данных или отладки (см. описание ф-ии)
как дополнение можно использовать простой кусок кода для запроса диапазона, по IP клиента
127.0.0.1 In the NetRange: 127.0.0.0 - 127.255.255.255
OK 3
ну и там еще пара вариантов есть
@StenLi
На доске почёта Пожизненный блэк
Join Date: Aug 2008
Награды в конкурсах:
Posts: 2,729
Версия vB: 3.6.x
Reputation:
Expert 1991
Репутация в разделе: 636
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; } }
в очередной раз испытала гордость! Велик русский язык, воистину....
и это ж таки не все возможные варианты....
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,711
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20257
Репутация в разделе: 7723
0
вариантов написания цифры буквами может быть множество, в том числе и смесь ру/англ букв
так что массив наверное должен быть более объемный и немного с другой структурой
нечтовроде этого
в регулярке проверять строку из массива на совпадения и если найдено, возвращать соотв. цифру, иначе ноль
@StenLi
На доске почёта Пожизненный блэк
Join Date: Aug 2008
Награды в конкурсах:
Posts: 2,729
Версия vB: 3.6.x
Reputation:
Expert 1991
Репутация в разделе: 636
0
Quote:
Originally Posted by kerk
вариантов написания цифры буквами может быть множество, в том числе и смесь ру/англ букв
так что массив наверное должен быть более объемный и немного с другой структурой
нечтовроде этого
У меня 12106 из ~ 14000 сошлось, учитывая все погрешности и отсутствия - это 98-99% нужных мне записей в бд.
Не вопрос, можно. Но через чур, да и время было ограниченное.
Quote:
Originally Posted by Luvilla
в очередной раз испытала гордость! Велик русский язык, воистину....
и это ж таки не все возможные варианты....
Самое интересное, я как обычно сначала все сделал, потом уже накидал функцию, чтобы сюда выкинуть.
Забыл внести в массив фразу "нуль", которая по
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 значений.