Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кто встречал такую функцию? 
:(
    Опции темы
Loncaster
Дата 27.10.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 8.8.2006

Репутация: нет
Всего: нет



Вообщем у меня есть список айпи адресов в виде ip/mask т.е. 62.63.76.19/32 и т.д..таких может быть хоть сотня...вобщем мне нужна функция которая сможет проверить входит ли заданный айпи в такой вот диапазон айпи....заранее благодарен..
--------------------
Ще не вмерла Україна...
PM MAIL   Вверх
thomas
Дата 27.10.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 6
Всего: 65



Loncaster, 
Привет.
Если я правильно тебя понял, то у тебя есть массив с IP адресами и тебе нужно проверять входит ли вводимый IP адрес в имеющиеся или нет.
Для этого тебе нужно самому написать функции сортировки массива и бинарного поиска(очень быстрый) в массиве.(работает в отсортированном массиве)




Это сообщение отредактировал(а) thomas - 28.10.2006, 10:28


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
archimed7592
Дата 28.10.2006, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



Код
UInt32 ip = ...;
UInt32 mask = ...;
UInt32 someIP = ...;
Boolean sameScope = (someIP & mask) == (ip & mask);

в твоём случае
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
PM Jabber   Вверх
mr.DUDA
Дата 28.10.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Пример:

Код
using System;
using System.Collections.Generic;
using System.Net;

class Program
{
    static void Main()
    {
        Dictionary<IPEndPoint, bool> range = new Dictionary<IPEndPoint, bool>();

        range[new IPEndPoint(IPAddress.Parse("62.63.76.19"), 32)] = true;
        range[new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80)] = true;

        // ... добавляем остальные адреса/порты

        // пробуем найти
        IPEndPoint search = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80);
        if (range.ContainsKey(search))
        {
            // нашли.
        }

    }
}


Вместо IPAddress.Parse можно использовать "new IPAddress(массив_байтов_адреса)" или конструктор с одним long-значением адреса. Этот пример использует при поиске хэш-код IP с портом, т.к. функция GetHashCode переопределена в IPEndPoint, поэтому поиск гарантировано вернёт правильное значение "найдено/не найдено", и будет занимать минимальное время.


--------------------
user posted image
PM MAIL WWW   Вверх
archimed7592
Дата 28.10.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 7
Всего: 93



mr.DUDA,  smile ip/mask - это нечто немного иное, чем ip:port (где порт - понятие вообще говоря транспортного, а не сетевого протокола, а вот маска подсети как раз сетевого).
запись 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 адресов)? по моим скромным подсчётам около полугигабайта smile 



--------------------
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
PM Jabber   Вверх
mr.DUDA
Дата 29.10.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Перепутал вопрос, почему-то подумал о "ip адрес/порт" а там действительно речь идёт о маске.  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1398 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.