ip адрес в regex

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #1
Здравствуйте. Хочу решить проблему с написанием в чат ip серверов через пробел.


PHP:
ip_serv = CompileRegex("\\d+\\.\\d+\\.\\d+\\.\\d+(:\\d+)?");

Блокируется:
99.99.88.77:66666
99.99.88.77: 66666
99.99.88.77 :66666

Не блокируется:
Блокируется:
99. 99 .88. 77:66666
99.99.88. 77:66666

Тоесть если в самом ip адресе есть пробел(ы) то уже не блокируется. Есть идеи как исправить ?
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Забкй на это :D Всем явно будет влом копировать такие адреса... Я иногда просто пост-фактум ищу по таблице чата хлстатс по ":27" или ":28" и баню...
Зато это может внести много глюков - лучше конкретно задать цифры длиной 1-3 (или конкретно 0-255), или можно в принципе отслеживать ":27***" и ":28***"...
Хотя может есть более верный способ с очень маленькими ложными срабатываниями... Поэтому в приципе присоединюсь - есть у кого-либо более точные методы определения?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #3
Последнее редактирование:

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Попробуй просто искать :27 и :28, если найдет, блокируй чат
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Попробуй просто искать :27 и :28, если найдет, блокируй чат

Угу, а содержимое записывать в лог и потом смотреть на заблоченное :)
А еще лучше сразу передавать на скрипт, который будет сканить инфу о сервере и возможно еще что-либо веселое делать :secret:
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Лень делать больше проверок, может быть потом
PHP:
#include <sourcemod>

public OnPluginStart() 
{
	new String:test[][] = {	"1.2.3.4:27015",
								"132.321.123.123:27015",
								"94.55.22.48:27401",
								"prosto stroka",
								"sam125.8.4.8.54:2b shoke578"};

	new size = sizeof(test);

	for (new i = 0; i < size; i ++)
	{
		PrintToServer("STRING: %s	:	%s", test[i], FunctionCheckString(test[i]) ? "IP" : "NO");
	}
}

bool:FunctionCheckString(const String:text[])
{
	new len = strlen(text);

	new CountNumeric	= 0,
		CountDot			= 0,
		CountColon		= 0;

	for (new i = 0; i < len; i++)
	{
		if (IsCharNumeric(text[i]))
		{
			CountNumeric++;
		}
		else
		{
			if (text[i] == '.')
			{
				CountDot++;
			}
			else
			{
				if (text[i] == ':')
				{
					CountColon++;
				}
			}
		}
	}

	return (CountNumeric > 4 && CountDot > 2 && CountColon > 0) ? true : false;
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #9
Серый™, кажись работает. Щас проверю наверняка. По краней мере здесь нормально.
 
Последнее редактирование:
Сверху Снизу