![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Loncaster |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 8.8.2006 Репутация: нет Всего: нет |
Вообщем у меня есть список айпи адресов в виде ip/mask т.е. 62.63.76.19/32 и т.д..таких может быть хоть сотня...вобщем мне нужна функция которая сможет проверить входит ли заданный айпи в такой вот диапазон айпи....заранее благодарен..
--------------------
Ще не вмерла Україна... |
|||
|
||||
| thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Loncaster,
Привет. Если я правильно тебя понял, то у тебя есть массив с IP адресами и тебе нужно проверять входит ли вводимый IP адрес в имеющиеся или нет. Для этого тебе нужно самому написать функции сортировки массива и бинарного поиска(очень быстрый) в массиве.(работает в отсортированном массиве) Это сообщение отредактировал(а) thomas - 28.10.2006, 10:28 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 7 Всего: 93 |
в твоём случае ip = 62 * 0x1000000 + 63 * 0x10000 + 76 * 0x100 + 19; mask = 0xffffffff; -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Пример:
Вместо IPAddress.Parse можно использовать "new IPAddress(массив_байтов_адреса)" или конструктор с одним long-значением адреса. Этот пример использует при поиске хэш-код IP с портом, т.к. функция GetHashCode переопределена в IPEndPoint, поэтому поиск гарантировано вернёт правильное значение "найдено/не найдено", и будет занимать минимальное время. -------------------- ![]() |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 7 Всего: 93 |
mr.DUDA,
запись ip/mask означает подсеть, содержащую все адреса у которых старшие mask битов фиксированны и определены. к примеру 127.0.0.0/8 (loopback) содержит в себе 16 млн. адресов у которых страший байт (8 бит) равен 127, а остальные произвольные. 192.168.100.0/28 соответствует адресам 192.168.100.0-192.168.100.15 (младшие 4 бита свободны, остальные фиксированны). 4.5.6.7/32 соответствует единственному адресу 4.5.6.7 (где-то в штатах). ну и в конце концов 10.0.0.0/8, 10.0.0.1/8, 10.0.0.2/8, ... , 10.255.255.255/8 - это разный способ записи одной и той же подсети, одного и того же диапазона адресов. предложенная хэштаблица - это конечно быстро, но как вы понимаете добавив 192.168.100.0/28 вы никогда не получите от неё положительного ответа на вопрос о присутствии адреса 192.168.100.1. выход есть - добавлять весь диапазон в хэш. т. е. адреса 192.168.100.0-192.168.100.15, но вот вопрос: каков получится размер таблицы, если засунуть туда с десяток сетей класса A (2^24 адресов)? по моим скромным подсчётам около полугигабайта -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Перепутал вопрос, почему-то подумал о "ip адрес/порт" а там действительно речь идёт о маске.
-------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |