Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как получить список IP адресов для сети?

14K
21 января 2007 года
zhz
16 / / 25.10.2006
собственно, есть ip адрес и маска, формат задания маски для удобства неограничен, но думаю лучше ввиде /24 например. Хотелось получить хоть кусочек кода который получает все ip адреса для заданной сети.
1.9K
22 января 2007 года
Anton Chik
175 / / 26.09.2005
пропингуй данную подсеть
309
22 января 2007 года
el scorpio
1.1K / / 19.09.2006
Число компов определить просто:
Берём значение unsigned __int32 (беззнаковое, 4 байта)
Помещаем туда "маску" и делаем логическое инвертирование - вот вам и кол-во IP-адресов подсети.
294
23 января 2007 года
Plisteron
982 / / 29.08.2003
Цитата: el scorpio
Число компов определить просто:
Берём значение unsigned __int32 (беззнаковое, 4 байта)
Помещаем туда "маску" и делаем логическое инвертирование - вот вам и кол-во IP-адресов подсети.


Адреса хоста 0 и 255 зарезервированы, так что из полученного числа надо ещё вычесть 2. Кроме того, количество адресов -- это ещё не количество компов в сети: некоторые могут иметь 2 или более IP-адресов на одном сетевом интерфейсе, или же IP-адрес может принадлежать вовсе не компьютеру, а, скажем, маршрутизатору.

309
23 января 2007 года
el scorpio
1.1K / / 19.09.2006
Цитата:
Адреса хоста 0 и 255 зарезервированы, так что из полученного числа надо ещё вычесть 2.


Не факт, "маска подсети" может быть отличной от "255.255.255.0", из-за чего указанные "зарезервированные" адреса под эту маску не попадут. Так что нужно сначала вычислить перечень IP-адресов, а уже потом определять "лишние".

294
23 января 2007 года
Plisteron
982 / / 29.08.2003
Цитата: el scorpio
Не факт, "маска подсети" может быть отличной от "255.255.255.0", из-за чего указанные "зарезервированные" адреса под эту маску не попадут. Так что нужно сначала вычислить перечень IP-адресов, а уже потом определять "лишние".



Скажем так: зарезервирован адрес хоста "все нули" и "все единицы". По-любому это всегда два адреса. Так что вычитаем всё-таки два.

14K
23 января 2007 года
zhz
16 / / 25.10.2006
Похоже меня нрикто не понял, может я плохо обьяснил, не важно. Необходимо написать функцию(хотелось бы иметь все таки функцию) например такую
void __fastcall ListHosts(AnsiString Ipadres, int netmask, ListBox *lb)
которая бы находила ВСЕ адреса для заданной сети.
например:
Ipdares = 192.168.1.0
netmask = 24 // /24 или если кто не понял 255.255.255.0
и функция вернет в листбокс
192.168.1.1
192.168.1.2
192.168.1.3
-----------
-----------
192.168.1.254

Ниче пинговать не надо! необходимо перечислить все адреса заданной сети. Сам алгоритм такой:
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 это количество бит айпи адреса отводимое для адресации сети,
Понятия не имею как это реализовать в билдере
294
23 января 2007 года
Plisteron
982 / / 29.08.2003
Понятно. А что тут сложного?
14K
23 января 2007 года
zhz
16 / / 25.10.2006
Ну для вас может и не сложно, но я не могу реализовать это в билдере.
Если случай бональный, например адрес 192.168.10.0 и маска /24, как я описал в примере, то это я могу в уме посчитать, а если маска будет например 20 и 26 ?
294
24 января 2007 года
Plisteron
982 / / 29.08.2003
Цитата: zhz
Ну для вас может и не сложно, но я не могу реализовать это в билдере.
Если случай бональный, например адрес 192.168.10.0 и маска /24, как я описал в примере, то это я могу в уме посчитать, а если маска будет например 20 и 26 ?

 
Код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    unsigned int x = Edit1->Text.ToInt();
    unsigned int y = 32 - x;
    unsigned int z = (1 << y) - 2;
    Edit2->Text = IntToStr(z);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог