AMX MOD X
Пятница, 19.04.2024, 23:07:24



Приветствую Вас Гость | RSS
[ Главная ] [ IP functions - Страница 2 - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Скрипты » IP functions (Функции для работы с IP адресами)
IP functions
PomanoBДата: Среда, 17.12.2008, 22:47:32 | Сообщение # 16
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Ну можно например переводить в число два граничных адреса и сравнивать ip1 < ip_test < ip2
Лично я использовал это во время переделки плагина RankSystem для работы с PsychoStats 3.1, который использует именно такое представление адреса


http://romanov4400.mybrute.com

Сообщение отредактировал PomanoB - Среда, 17.12.2008, 22:48:55
 
TheCooLeRДата: Четверг, 25.12.2008, 17:32:14 | Сообщение # 17
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Не в сети
Как перегонять ip в long? Тоже для PS3 нужно.
 
slogicДата: Четверг, 25.12.2008, 17:43:40 | Сообщение # 18
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (draft)
как сделать тот же бан подсети. Возможно, я просто торможу и не вижу очевидного...

Подсеть тоже можно преобразовать в long, а дальше используешь битовые операции.
 
ZefirДата: Среда, 07.01.2009, 14:49:08 | Сообщение # 19
Майор
Группа: Пользователи
Сообщений: 83
Репутация: 5
Статус: Не в сети
Я считаю главная проблема работы с сетями в AMXX, это трудности с динамическим хранением данные любого размера. Вернее со скоростью доступа к ним и т.д. Потом преобразование из строкового в числовое, тоже достаточно накладная операция.

Вот если бы к примеру в FakeMeta импортировать из стандартной сишной библиотеки, и потом експортировать для использования, простейшие функции ip2long и наоборот, было бы просто замечательно. Работу с масками в принципе не тяжело и на PAWN реализовать.

Я в своей разработке сейчас не парюсь. Так как используется mysql, я использую встроенные в него аналогичные функции. В amx для того чтобы пореже дергать базу, делаю кеширование. На 64 адреса последних игроков, потом самые старые заменяються вновь законектившимися.

База сетей уже большая, можете глянуть здесь http://headshot.kiev.ua/forum/csnets.php . Но работает все на ура, на скорость не жалуюсь.
Там есть как сети, так и конкретные адреса.
Запрос приблизительно такой:

Code

SELECT allow, inet_aton(mask) as netmask    
       FROM nets    
       WHERE (inet_aton(net) & inet_aton(mask) = inet_aton('%s') & inet_aton(mask))    
       ORDER BY netmask DESC

на выходе может оказаться несколько сетей с разной маской. Беру только самую первую ибо они отсортированы по ней и самая длинная указывает на самый подходящий диапазон.

Интересует только поле allow, именно оно говорит какая это сеть, запрещенная, забаненная, разрешенная, и дальше уже работаю с игроком.


Чтобы правильно задать вопрос, нужно знать больше половины ответа...
Cerberus(Цербер) - начато публичное тестирование
Энциклопедия Counter-Strike


Сообщение отредактировал Zefir - Среда, 07.01.2009, 14:52:07
 
draftДата: Пятница, 16.01.2009, 22:33:51 | Сообщение # 20
Полковник
Группа: Пользователи
Сообщений: 225
Репутация: 3
Статус: Не в сети
Quote
WHERE (inet_aton(net) & inet_aton(mask) = inet_aton('%s') & inet_aton(mask))

А как вот это условие логически работает?
 
slogicДата: Понедельник, 19.01.2009, 14:42:16 | Сообщение # 21
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (Zefir)
Интересует только поле allow, именно оно говорит какая это сеть, запрещенная, забаненная, разрешенная, и дальше уже работаю с игроком.

Не только. Если запрос ничего не вернул, значит сеть у тебя не зарегистрирована, и ее надо блочить по-умолчанию (хотя от твоей политики зависит).

Quote (draft)
А как вот это условие логически работает?

В %s подставляется IP адрес клиента. Условие проверяет, входит ли данный IP в подсеть, определенную маской mask. Т.е. в базе находится список подсетей с их масками. Причем там могут быть и изыточные данные. Например две записи с сетью 10.0.0.0 и масками 255.0.0.0 и 255.255.0.0. Логично, что вторая маска (а следовательно и запись) является избыточной и можно смело удалить.
 
ZefirДата: Четверг, 12.02.2009, 18:36:59 | Сообщение # 22
Майор
Группа: Пользователи
Сообщений: 83
Репутация: 5
Статус: Не в сети
Да конечно, политика работы с адресами не присутствующими в базе зависит от режима работы сервера, к примеру вот здесь я начал потихоньку описывать...
http://headshot.kiev.ua/forum/doku.php?id=cerberus:modes

по поводу вхождения адреса в несколько подсетей, то да, у меня там сортировка идет, и решающей есть сеть которая имеет самую длинную маску. Удалять их нельзя, ибо они сделаны для того чтобы можно было закрыть большую сеть и открыть меньшую внутри нее, и это нормально.

А конкретно чаще работает так. Есть открытая сеть моего провайдера, 10.64.0.0. Я из нее всех пускаю без регистрации, но если чел попался с читом, его конкретный адрес также попадает в таблицу с маской /32, и естественно так как маска самая длинная, для этого игрока будет требоваться или регистрация, или, если он был забанен в перманент, то с этого адреса фиг зайдешь теперь. То есть работает смешанный стиль ограничения доступа, как по никам, так и по адресам.


Чтобы правильно задать вопрос, нужно знать больше половины ответа...
Cerberus(Цербер) - начато публичное тестирование
Энциклопедия Counter-Strike


Сообщение отредактировал Zefir - Четверг, 12.02.2009, 18:38:38
 
AMX Mod X Форум » Скриптинг » Скрипты » IP functions (Функции для работы с IP адресами)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

AMX Mod X Russian Community © 2006-2024