Получить список всех компьютеров в сети без DNS

Привет,

Мне нужен способ (либо через С#, либо в файле .bat), чтобы получить список всех компьютеров в данной сети. Обычно я использую "net view", но это работает (насколько я понимаю) только в пределах вашего домена. Мне нужны имена (или хотя бы IP-адреса) всех компьютеров, доступных в моей сети.

Возможность получить все компьютеры в домене, который не принадлежит мне (в этом случае я бы использовал WORKGROUP или что-то другое по умолчанию), также будет работать.


person AlexeyMK    schedule 19.09.2008    source источник
comment
Проверьте это решение stackoverflow.com/questions/2557551/   -  person KindDragon    schedule 02.04.2010


Ответы (4)


Для этого хорошо подходит Nmap — используйте опцию -O для идентификации ОС и -oX "filename.xml" для вывод в виде xml, который затем можно проанализировать из С#.

Подходящей командной строкой будет (где 192.168.0.0/24 — подсеть для сканирования):

nmap -O -oX "filename.xml" 192.168.0.0/24

пропустите -O, если вы не заинтересованы в угадывании ОС - если вы просто хотите выполнить проверку связи, используйте -sP или прочитайте документацию для множества других вариантов.

person Whisk    schedule 19.09.2008
comment
Это выглядит весьма многообещающе. Является ли интерфейс командной строки достаточно мощным, чтобы его можно было использовать для программного получения списка композиций? - person AlexeyMK; 20.09.2008
comment
Да, конечно - я обновил свой ответ несколькими дополнительными подробностями - person Whisk; 20.09.2008
comment
Спасибо! Я посмотрю, сработает ли это для нас (соображения безопасности, добавление дополнительных сторонних приложений и т. д.), но это действительно лучший ответ. Какой будет полная команда? Судя по комментариям, это nmap -sL -O -oX filename.xml — правильно ли это звучит? - person AlexeyMK; 20.09.2008
comment
Это хорошее решение, если вы не возражаете против использования nmap. В своем ответе я предположил, что вы хотите создать его самостоятельно. - person UnkwnTech; 20.09.2008
comment
Посмотрим — я действительно хочу собрать его самостоятельно, также хотел оставить готовое «просто используйте эти параметры» для будущих зрителей, которые, надеюсь, смогут просто скачать и скопировать-вставить, не залезая в документацию. Я понимаю, что вы имеете в виду. - person AlexeyMK; 20.09.2008
comment
-sL просто выполняет обратный DNS на всех хостах, фактически не сканируя их. Я думаю, это зависит от того, как далеко вы хотите зайти - простое разрешение Netbios даст вам некоторую информацию, но если вы хотите принять во внимание другие ОС или ПК с брандмауэром, nmap проделает гораздо более тщательную работу. - person Whisk; 20.09.2008
comment
Хорошо, принимая этот ответ - я думаю, что его с большей вероятностью будут использовать будущие читатели. Спасибо1 - person AlexeyMK; 20.09.2008

Чтобы расширить то, что сказал Unkwntech -

Вы также можете выполнить «широковещательный» пинг, чтобы не пинговать каждый IP-адрес по отдельности.

Сразу после этого вы можете использовать «arp» для проверки кеша ARP и получения списка того, какие IP-адреса находятся на каком MAC-адресе.

person Alnitak    schedule 22.09.2008

Пропингуйте все в ярости, тогда вы сможете получить информацию о netbios от систем, которые отвечают, чтобы идентифицировать его имя.

person UnkwnTech    schedule 19.09.2008
comment
Два вопроса: 1. Что делать, если это огромный диапазон? Любые альтернативы? 2. Как именно мне сделать netbios? - person AlexeyMK; 20.09.2008
comment
Я не знаю, как сделать netbios, но я знаю, что это сработает, во-вторых, если есть большой диапазон, то ждите только одного пакета в каждом пункте назначения и используйте довольно низкий тайм-аут. - person UnkwnTech; 20.09.2008
comment
Чтобы получить имя хоста по IP, вы можете использовать nslookup - person Oxymoron; 04.07.2016

В одном из моих веб-приложений я использовал функцию NetApi32 для просмотра сети.

Код: http://gist.github.com/11668

person EricSch    schedule 19.09.2008
comment
Очень, очень интересно. Можете ли вы объяснить, как это работает, пожалуйста? - person AlexeyMK; 21.09.2008
comment
Первоисточник и статья: codeproject.com/KB/IP/ListNetworkComputers.aspx - person Kris Erickson; 06.08.2011