Поиск:

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


Шустрый
*


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

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



собственно, есть ip адрес и маска, формат задания маски для удобства неограничен, но думаю лучше ввиде /24 например. Хотелось получить хоть кусочек кода который получает все ip адреса для заданной сети.
PM MAIL ICQ   Вверх
stmamont
Дата 22.1.2007, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



наверное надо просто перебрать все адреса и пропинговать их

Добавлено @ 01:35 
например у компонента TIdRowClient есть метод Ping
то есть
Код

TIdRawClient *cl = new TIdRawClient(0);

for(/*по всем адресам где AnsiString Adress - адрес*/)
{
  cl->Host = Adress;
  cl->Ping();
  // результат хранится в cl->ReplyStatus;
}

delete cl;


все это  есть в справке билдера. смотри


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


Шустрый
*


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

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



неееееее, мне совсем не то надо! мне надо написать функцию которая бы получала все адреса для заданной сети, и все!
например, я передаю в функцию два параметра, адрес сети(например 192.168.10.0) и маску(не важног в каком виде) - например /24 и функция должна вывести мне все возможные адреса:
192.168.10.1
192.168.10.2
192.168.10.3
.....................
.....................
.....................
.....................
192.168.10.254
Все просто на этом примере, понятия не имею как делать когда маска будет например /26 или /18
PM MAIL ICQ   Вверх
AntonChik
Дата 22.1.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ну так и делай... перебирай все адреса (0...255) и сравнивай каждый поразрядно конъюктивно с маской...
проблемы с двоичными числами?
--------------------
"Человек притаился за деревом. За широким огромным деревом. Он выглядывал тихонько и прятался. Но его никто не преследовал." (с) Хорги 
PM MAIL   Вверх
zhz
Дата 22.1.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(AntonChik @  22.1.2007,  10:20 Найти цитируемый пост)
поразрядно конъюктивно с маской...

вот если бы я знал что это значит, то и не создовал бы тему.... маску  /24 я для примера привел, сам понимаю что в этом диапазоне и считать то нечего (001-254), но маска то может быть и /26 например, 
и вот тут вообще не знаю как посчитать, ну тоесть могу на бумажке с калькулятором посчитать, а как функцию надолбить, не знаю
PM MAIL ICQ   Вверх
stmamont
Дата 22.1.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



объясни только что такое /24 и /26 и я скажу как это сделать)


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


Шустрый
*


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

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



Цитата(stmamont @  22.1.2007,  12:14 Найти цитируемый пост)
объясни только что такое /24 и /26 и я скажу как это сделать) 

Значит так.
IP - адрес сети с маской 24 записывается как 192.168.48.0/24
где 24 бита отводится для адреса сети 
11000000.10101000.00110000.00000000
и 8 бит (32-24) отводится для адреса хоста
11000000.10101000.00110000.00000000 маска 255.255.255.0
Адреса начинаются с адреса
11000000.10101000.00110000.00000000 192.168.48.0
а заканчиваются адресом
11000000.10101000.00110000.11111111 192.168.48.255
Первый обозначает сеть 192.168.48.0, а последний broadcast 192.168.48.255 и эти два адреса мы не учитываем.
Значит, диапазон будет от
11000000.10101000.00110000.00000001
до
11000000.10101000.00110000.11111110
или
192.168.48.1 – 192.168.48.254


/24 и /26  это количество бит айпи адреса отводимое для адресации сети,





Это сообщение отредактировал(а) zhz - 22.1.2007, 12:26
PM MAIL ICQ   Вверх
Grom
Дата 22.1.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



zhz, а если маска 192.168.48.0/26 ? то 10 бит под адрес узла сети. а 10 бит это как будет ?
11000000.10101000.00110000.00000000 так чтоли ?
объясни или дай линк где поподробней почитать.. всегда интересовался но ничего толкового не встречал.
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
GIK
Дата 22.1.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Цитата

объясни или дай линк где поподробней почитать..

точно, а алгоритм напишем быстро smile 


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
stmamont
Дата 22.1.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а я понял
значит так если у тебя есть какая то маска
то ты смотришь сколько у тебя битов свободных т.е.
8 или 6


Код

int numBits = 8; // пусть 8
for(int i = 0 ; i < (1 << 8) ; ++ i)
{
  // в i хранится значение последних 8 битов
  // если int ip[4] - представление ip адреса, то
  ip[3] = ip[3] | i;

}


Добавлено @ 16:58 
если отсчет идет так
11000000.1  0  1  0  1  0  0  0 .00110000.11111110
87654321.161514131211109 ....

Добавлено @ 16:59 
если нет то  а наоборот то
Код

ip[3] = ip[3] | i << (8 - numBits);



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


Шустрый
*


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

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



Для общего развития всех перцев этого форума, понятия не имеющих что такое IP - адресация, соорудил man. Надеюсь пригодится....smile 
кому понравится, могут плюсик поставить  smile

Добавлено @ 17:14 
Цитата(stmamont @  22.1.2007,  16:56 Найти цитируемый пост)
 i < (1 << 8) 
 ip[3] | i;

а это что значит smile 

Это сообщение отредактировал(а) zhz - 22.1.2007, 17:08

Присоединённый файл ( Кол-во скачиваний: 27 )
Присоединённый файл  IP.rar 7,88 Kb
PM MAIL ICQ   Вверх
GIK
Дата 22.1.2007, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



Цитата

например, я передаю в функцию два параметра, адрес сети(например 192.168.10.0) и маску(не важног в каком виде)

В смысле любой тип данных что ли?
Что-то типа:
Код

void IP_getAdres(int on, int to, int tr, int ch, int mask){
  int bit_1=1;
  if(on & bit_1) 
     cout<<1;
   else 
     cout<<0;  
  while(bit_1<<=1){
   if(on & bit_1) 
     cout<<1;
   else 
     cout<<0;
 }
 /*
  и так далее все остальные составные части....
 */
}


Цитата

Добавлено @ 17:14 

Цитата(stmamont @  22.1.2007,  16:56 ) 
 i < (1 << 8) 
 ip[3] | i; 
а это что значит

Это побитовые операции:
1) операция << - сдвиг влево 
например (1 << 8) = 00000000 00000001 << 8 = 00000001 00000000
все биты смещаются влево

2) операция | (побитовое или)
например 3 | 1 = 00000011 | 00000001 = 00000011 
если хотябы один бит имеет значение "единичка", то в результате единичка сохраняется


Это сообщение отредактировал(а) GIK - 22.1.2007, 17:48


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
GIK
Дата 22.1.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


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

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



zhz, блин, супер, спасибо за ман, давно хотел разузнать про IP адресацию.

Код

#include<iostream>
#include<stdio>
# include <conio>

  using namespace std;
 void IP_getAdres(int ip1, int ip2, int ip3, int ip4, int mask){ 
  int diapazon = 32 - mask;

 int maskD=1;
  for(int i=0; i<diapazon; i++){ //Диапазон IP – адресов хостов для заданной сети
     maskD*=2;
  }
  maskD-=1; //;)
  for(int i=1; i<maskD; i++){
   cout<<ip1<<"."<<ip2<<"."<<ip3<<"."<<ip4<<"."<<i<<endl;
  }
};

int main(int argc, char* argv[])
{   int mask;
    cin>>mask;
    IP_getAdres(192,168,48,0,mask);
    getch();
        return 0;
};



Это не то что тебе надо, но принцип тоже, что ты и хотел увидеть.
Очень мне интересно стало, хочу еще больше узнать что и как, и в каком формате, и куда передается информация о IP.
Народ присоединяйся, делитесь инфой кто че знает smile


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
Grom
Дата 23.1.2007, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



zhz, спасибо. отличный ман. !
--------------------
Хостинг, Vds, Dedicated serve, регистрация доменов (RU,com,net,org) - обращаться в icq.
PM MAIL   Вверх
Bima
Дата 23.1.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот пример, который ты просил.
Данные заносятся в ListBox.
Ничего сложного, я думал, ты сам бы сделал, причем все исходные данные у тебя были.

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  IpAdress.rar 11,73 Kb


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

Клавиатура и мышь - это главные инструменты прогресса.
PM MAIL WWW   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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