Пишу простую программу для поиска по локальной сети, программа имеет несколько вариантов поиска (проверка одного IP-адреса, проверка имени хоста, проверка подсети локальной машины …. и т. Д.).
И я застрял на «проверить локальную подсеть машины» (по крайней мере, я думаю, что это может быть проблемой) !?
Хорошо, вот что может быть проблемой, поэтому я хотел бы знать, если есть способ справиться с этим в C ++.
Когда я использую getadapteraddresses()
чтобы получить IP-адрес и маску подсети, чтобы я мог искать подсеть локальной машины, мои сомнения, что если getadapteraddresses()
обратная подсеть — 255.255.254.0 и IP — 192.160.5.10. Первый шаг — поиск 192.168.5.0-255, но что дальше, в каком диапазоне я должен искать 192.168.6.0-255 или 192.168.4.0-255 ..?
Если есть способ определить это в c ++, любой совет был бы полезен.
Спасибо 🙂
Вы можете вычислить все адреса с чем-то вроде
int count = (~netmask) & 0x7FFFFFFF;
int network = ip_address & netmask;
for (int i=1; i<count; i++) {
int addr = network + i;
...
}
Чувак, я думаю, ты неправильно понял. 192.168.5.x не находится в диапазоне 255.255.254.0. Эта маска подсети допускает адреса от 192.168.0.0 до 192.168.1.255. Если 5 является частью хоста, маска должна быть 255.255.248.0.