![]() |
|
Модераторы: bsa |
![]()
|
|
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Доброе время суток.
Пишу систему фильтрации входящих пользователей по IPv4. (BannedList) # Задача: Написать две функции:
2-я: Сравнивает два IP-Адреса на вхождения учитывая маску(*); Пытался реализовать следующим образом:
- Можно конечно реализовать в лоб, считывания кол-во '.', и если 3, то затем уже разбивать на 4 части и уже проверять, но хотелось бы как-то по красивее. # Добавлено: Более подробно о функции sscanf(); Это сообщение отредактировал(а) MuForum - 8.6.2009, 14:28 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: 2 Всего: 9 |
в принципе, можно использовать регулярные выражения. sscanf() лучше в этом случае не использовать. Если не нравятся регулярные выражения, тогда можно использовать ф-ию strtok(), чтобы распилить строку по точкам. Каждую группу цифр проверить на правильность, т.е. то, что это цифра, перевести, скажем atoi() в целое, проверить, не слишком ли оно большое, перед переводом проверить, что число не превышает 3х знаков. Потом проверять маски.
sscanf() здесь плохо -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
#2, InvalidProperty - Решил старым, дедовским способом, однако хотелось бы услышать комментарии по этому коду.
P.S. -> Просьба прокомментировать данный код. Это сообщение отредактировал(а) MuForum - 8.6.2009, 14:06 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
# for all - Парни, помогите пожалуйста решить задачу через регулярные выражения.
Необходимо обрабатывать все диапозоны.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| MuForum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 427 Регистрация: 13.6.2007 Где: Молдова, Кишинев Репутация: нет Всего: 4 |
Интернет лаганул, продублировало сообщение.
Просьба модераторов удалить. Это сообщение отредактировал(а) MuForum - 8.6.2009, 15:29 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли) |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Коментирую - жуть
Заданный IP нужно просто перевести в 2 числа - собственно IP и маску (для каждого '*'). Сравнения потом делаются исключительно битовыми операциями:
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |