Я хочу получить список всех IP-адресов (т.е. устройств), присутствующих в локальной сети. Я не хочу использовать nmap, другие сетевые инструменты. А также я не хочу пинговать каждый IP-адрес в диапазоне подсети и находить действующие IP-адреса? Есть ли способ с помощью C, C ++?
Не существует надежного способа определения всех хостов в локальной сети. Есть много способов угадать ваших соседей, каждый из которых имеет свои преимущества и недостатки. Но вы никогда не будете уверены, что получите все хосты. например, вы можете попытаться пропинговать трансляцию, но кто-то не смог ответить на пинг. Поэтому нет надежного способа сделать это. Есть несколько способов, которые полагаются на команды в терминале.
Вы можете попробовать использовать nmap. Хотя для этого нужно установить nmap:
nmap -sP 192.168.1.*
Это делает простое сканирование ping во всей подсети, чтобы увидеть, какие все хосты находятся в сети.
Или вы также можете попробовать следующие шаги (не требует установки nmap):
Вы можете запустить arp или nmap с соответствующими аргументами в вашем приложении, используя некоторый инструментарий.
В Qt вы можете использовать QProcess для их выполнения, например:
QProcess myProcess;
QString program = "arp";
QStringList arguments;
arguments << "-a";
myProcess.start(program, arguments);
myProcess.waitForFinished();
QByteArray result = myProcess.readAllStandardOutput ();
const QString all(result);
Нет.
Конечно, вам придется использовать некоторые «сетевые инструменты», чтобы понять это, как вы ожидаете, что машина, на которой вы будете знать о других машинах в противном случае?
Один из подходов может заключаться в запросе к серверу DHCP, но при этом не отображаются устройства со статическими IP-адресами и т. Д.
Любой надежный метод связан с определенным взаимодействием с соответствующими устройствами.
Вы можете использовать libpcap для перехвата сетевых пакетов в случайном режиме в центральном местоположении и извлечения IP-адреса источника. Задача заключается в определении центрального места, где можно разместить этот сниффер.