Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как получить все адреса для сети? 
:(
    Опции темы
zhz
Дата 24.1.2007, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 31.10.2006
Где: Petropavlovsk-Kam chatsky

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



Цитата(Bima @  23.1.2007,  16:54 Найти цитируемый пост)
от пример, который ты просил.
Данные заносятся в ListBox.
Ничего сложного, я думал, ты сам бы сделал, причем все исходные данные у тебя были. 

то ли лыжи не едут толи ........
СКАЖИ, ГДЕ ТЫ ВИДЕЛ АДРЕС ВИДА  192.168.10.4094 ?  именно такой хост был последним в диапазоне. для адреса 192,168,10,0 и маски 20.
Конечно большое спасибо за то что взялся, но это совсем не правильно работает. я постарался написать доходчивый документ, в котором описана вся процедура нахождения диапазона адресов, 
и она не имеет ничего общего с предложенной тобой
PM MAIL ICQ   Вверх
Bima
Дата 24.1.2007, 06:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не видел!
но переделать пример, относительно маски меньше 24, дело 2 минут. Алгоритм тот же, только придется добавитьеще один цикл по старшим битам маски.


--------------------
Чтобы дойти до цели, надо идти.

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
stmamont
Дата 24.1.2007, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вообще в builder int - 4 байтовый
тоесть весь ip можно запихать в intи соответственно маску
и не придется делать никаких дополнительных циклов)))
все сделается оченб просто в один цикл))


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


Шустрый
*


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

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



Так ?
Код

union    IP
{
    byte    ip[4];
    int    _ip;
};

int    GetIPs( byte ip[4], int mask, TStringList* Output )
{
    IP    _IP;
    _IP.ip[3] = ip[0];
    _IP.ip[2] = ip[1];
    _IP.ip[1] = ip[2];
    _IP.ip[0] = ip[3];
    int    Count = 1 << ( 32 - mask );
    for ( ; Count; Count--, _IP._ip++  )
    {
        Output->Add( IntToStr( _IP.ip[3] ) + "." + IntToStr( _IP.ip[2] )+ "." + IntToStr( _IP.ip[1] ) + "." + IntToStr( _IP.ip[0] ) );
    }
    return    0;
}


Надо еще проверки учесть

Это сообщение отредактировал(а) TiKKi - 24.1.2007, 19:10
PM   Вверх
stmamont
Дата 24.1.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как то лишком замутно. я бы сделал проще
Код

int ip;
for(int i = 0 ; i < 1 << ( 32 - mask ) ; ++ i)
{
  int nuIP = ip + i;
  // теперь преобразовываем в строку
  Output->Add(IntToStr( nuIP >> 24) + "." + IntToStr(nuIP << 8 >> 24) + "." + IntToStr(nuIP << 16 >> 24) + "." + IntToStr(nuIP << 24 >> 24));
}



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


Шустрый
*


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

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



Цитата

как то лишком замутно. я бы сделал проще

Чего замутного? 
Комментарии не написал, т.к. поздно было, спать хотел.
Вот с комментариями:
Код

// С помощью этой структуры получаем IP-адрес в качестве целого числа и наоборот
union    IP
{
    byte    ip[4];
    int    _ip;
};
// Пример вызова функции:
// byte    NetIP[4] = { 192, 168, 0, 0 };
// GetIPs( NetIP, 24, Output );
int    GetIPs( byte ip[4], int mask, TStringList* Output )
{
    IP    _IP;
// Переворачиваем адрес, т.к. старшие байты в памяти хранятся по младшим адреса.
    _IP.ip[3] = ip[0];
    _IP.ip[2] = ip[1];
    _IP.ip[1] = ip[2];
    _IP.ip[0] = ip[3];
// Кол-во хостов в данной сети
    int    Count = 1 << ( 32 - mask );
// Думаю, тут все понятно
    for ( ; Count; Count--, _IP._ip++  )
    {
        Output->Add( IntToStr( _IP.ip[3] ) + "." + IntToStr( _IP.ip[2] )+ "." + IntToStr( _IP.ip[1] ) + "." + IntToStr( _IP.ip[0] ) );
    }
    return    0;
}


Это сообщение отредактировал(а) TiKKi - 25.1.2007, 04:50
PM   Вверх
stmamont
Дата 25.1.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



TiKKi, нет смысл мне понятен. но можно поступить легче
мой код покороче и попроще будет)


--------------------
user posted image
PM MAIL ICQ   Вверх
TiKKi
Дата 25.1.2007, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спорить не буду, мне и свой и твой вариант нравится  smile 
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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