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);
}
как получить список IP адресов для сети?
собственно, есть ip адрес и маска, формат задания маски для удобства неограничен, но думаю лучше ввиде /24 например. Хотелось получить хоть кусочек кода который получает все ip адреса для заданной сети.
пропингуй данную подсеть
Берём значение unsigned __int32 (беззнаковое, 4 байта)
Помещаем туда "маску" и делаем логическое инвертирование - вот вам и кол-во IP-адресов подсети.
Цитата: el scorpio
Число компов определить просто:
Берём значение unsigned __int32 (беззнаковое, 4 байта)
Помещаем туда "маску" и делаем логическое инвертирование - вот вам и кол-во IP-адресов подсети.
Берём значение unsigned __int32 (беззнаковое, 4 байта)
Помещаем туда "маску" и делаем логическое инвертирование - вот вам и кол-во IP-адресов подсети.
Адреса хоста 0 и 255 зарезервированы, так что из полученного числа надо ещё вычесть 2. Кроме того, количество адресов -- это ещё не количество компов в сети: некоторые могут иметь 2 или более IP-адресов на одном сетевом интерфейсе, или же IP-адрес может принадлежать вовсе не компьютеру, а, скажем, маршрутизатору.
Цитата:
Адреса хоста 0 и 255 зарезервированы, так что из полученного числа надо ещё вычесть 2.
Не факт, "маска подсети" может быть отличной от "255.255.255.0", из-за чего указанные "зарезервированные" адреса под эту маску не попадут. Так что нужно сначала вычислить перечень IP-адресов, а уже потом определять "лишние".
Цитата: el scorpio
Не факт, "маска подсети" может быть отличной от "255.255.255.0", из-за чего указанные "зарезервированные" адреса под эту маску не попадут. Так что нужно сначала вычислить перечень IP-адресов, а уже потом определять "лишние".
Скажем так: зарезервирован адрес хоста "все нули" и "все единицы". По-любому это всегда два адреса. Так что вычитаем всё-таки два.
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 это количество бит айпи адреса отводимое для адресации сети,
Понятия не имею как это реализовать в билдере
Понятно. А что тут сложного?
Если случай бональный, например адрес 192.168.10.0 и маска /24, как я описал в примере, то это я могу в уме посчитать, а если маска будет например 20 и 26 ?
Цитата: zhz
Ну для вас может и не сложно, но я не могу реализовать это в билдере.
Если случай бональный, например адрес 192.168.10.0 и маска /24, как я описал в примере, то это я могу в уме посчитать, а если маска будет например 20 и 26 ?
Если случай бональный, например адрес 192.168.10.0 и маска /24, как я описал в примере, то это я могу в уме посчитать, а если маска будет например 20 и 26 ?
Код: