Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как получить все адреса для сети? 
:(
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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