Lote o arquivo para o grupo MASS ping de computadores na rede por nome, verifique a resposta e resolva o nome do host

3

Então, eu tenho uma lista de 5000 computadores na minha rede do Windows Active Directory que podem ou não existir (eu sei, não pergunte ... eu preciso saber de um projeto, e claro, pouca ajuda de as pessoas da rede e tantos erros nos dados que eles me dão)

Os nomes dos computadores estão no SAT1 a SAT5000. No entanto, alguns deles podem ter sido atualizados para um novo sistema operacional e renomeados. então, neste caso, gostaria de detectar o novo nome também.

Gostaria de saber se alguém pode ter um script que, dado um arquivo de texto contendo uma lista de nomes de computadores, para cada um: 1. ping o computador para verificar a existência (sim, ele deve estar ligado, eu sei)
2. depois de receber o ip do primeiro ping, faça um ping -a para obter um hostname
3. gravar os resultados em um arquivo de texto

(Ainda melhor ... é possível de alguma forma dividir o arquivo inicial em múltiplos, e gerar vários arquivos em lote para rodar simultaneamente, para diminuir a lentidão de pingar 5000 máquinas ??)

Atualizar

Este artigo parece estar relacionado ao que estou procurando: link

Atualização 2

Foi com isso que acabei:

@echo off
rem del output.txt
rem Loop thru list of computer names in file specified on command-line

for /f %%i in (%1) do call :check_machine %%i
goto end

:check_machine

rem Check to see if machine is up.
echo %1
ping -n 2 %1 >NUL 2>NUL
if errorlevel 1 goto down

rem Reverse-lookup machine name and report
  for /f "usebackq tokens=2,3" %%d in ('ping -n 1 -a %1 ^| find "Pinging "') do echo %1, %%d,%%e >> output.txt
goto end

:down
  rem Report machine down
  echo %1 >> output.txt

:end

E a saída está neste formato:

SAT10 
SAT1209 
SAT601, CGY2601.na.sat.com,[110.3.111.70] 
SAT3592, CGY3592.na.sat.com,[110.0.237.45] 

Se você dividir a lista de computadores em vários arquivos menores, será possível executar o ping de maneira assíncrona, assim:

del output.txt
start MassPing.cmd Computers1.txt
start MassPing.cmd Computers2.txt
start MassPing.cmd Computers3.txt
start MassPing.cmd Computers4.txt
start MassPing.cmd Computers5.txt
start MassPing.cmd Computers6.txt
    
por tbone 17.11.2009 / 02:11

7 respostas

7

Aqui está um arquivo em lotes para você:

@echo off
rem Loop thru list of computer names specified on command-line
for /f %%i in (%1) do call :check_machine %%i
goto end

:check_machine

rem Check to see if machine is up.
ping -n 2 %1 >NUL 2>NUL
if errorlevel 1 goto down

rem Reverse-lookup machine name and report
for /f "usebackq tokens=2" %%d in ('ping -n 1 -a %1 ^| find "Pinging"') do echo %1:Up:%%d
goto end

:down
rem Report machine down
echo %1:Down

:end

Passe um arquivo de texto com uma lista de nomes de computador nele e ele vai PING-los (2 tenta-- você pode aumentar isso, aumentando o número após "-n" na primeira linha de comando PING), e se obtiver uma resposta, execute uma pesquisa inversa do nome. Ele retorna resultados como:

computer-name-1:Up:name-it-resolved-to
computer-name-2:Down
computer-name-3:Up:name-it-resolved-to
...

Para executar múltiplos em paralelo, basta criar vários arquivos de texto com diferentes listas de nomes de máquinas e iniciar algumas cópias em paralelo.

Rápido e sujo economiza o dia.

    
por 17.11.2009 / 03:28
4

Você realmente precisa fazer ping? A conta do computador irá alterar automaticamente sua senha a cada 30 dias. Em um nível funcional 200/2003/2008, você pode usar dsquery computer -stalepwd X , em que X é o número de dias desde a última alteração de senha. Esse processo geralmente é automatizado, movendo as contas de computador que respondem a isso para uma unidade organizacional "OLD" e, depois de 30 a 90 dias adicionais, elas são automaticamente excluídas se a senha ainda não tiver sido alterada.

    
por 17.11.2009 / 03:34
3

Você também pode usar o nmap para verificação:

nmap -sn -PE -oG scan.txt 192.168.1.1 192.168.2.0/24

Citando a página man:

-sn: Ping Scan - disable port scan
   The default host discovery done with -sn consists of an ICMP echo request,
   TCP SYN to port 443, TCP ACK to port 80, and an ICMP timestamp request
   by default.

-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
   and Grepable format, respectively, to the given filename.

-PE; -PP; -PM (ICMP Ping Types) .
   In addition to the unusual TCP, UDP and SCTP host discovery types discussed
   previously, Nmap can send the standard packets sent by the ubiquitous ping
   program. Nmap sends an ICMP type 8 (echo request) packet to the target IP
   addresses, expecting a type 0 (echo reply) in return from available hosts.
   [...] Use the -PE option to enable this echo request behavior.

scan.txt será algo assim:

# Nmap 5.50 scan initiated Fri Aug 19 17:59:59 2011 as: nmap -vv -sn -PE -oG /tmp/scan.txt  192.168.1.1 192.168.2.0/24
# Ports scanned: TCP(0;) UDP(0;) SCTP(0;) PROTOCOLS(0;)

Host: 192.168.1.1 ()    Status: Down
Host: 192.168.2.0 (www.dummy.example.org)   Status: Up
Host: 192.168.2.1 (www.foo.example.org) Status: Down
...
# Nmap done at Fri Aug 19 18:03:26 2011 -- NNN IP addresses (1 host up) scanned in 4.02 seconds
    
por 23.08.2011 / 13:13
1

Outro método que pode funcionar para você é fazer com que o "Network Guys" cuspa as concessões do servidor DHCP. Pingar 5000 computadores demorará um pouco.

    
por 17.11.2009 / 16:33
1

Eu tive uma necessidade semelhante de fazer isso por vários milhares de computadores e desenvolvi um script do PowerShell para cuidar disso. Este script executa vários trabalhos em segundo plano ao mesmo tempo para acelerar o processo de ping e pode, opcionalmente, fazer um DnsLookup para pesquisar o endereço IP e o nome de domínio totalmente qualificado. O desempenho irá variar dependendo de quantos tempos limite foram encontrados, mas o script foi concluído para mais de 12.000 hosts em menos de 15 minutos.

O script é grande demais para ser postado aqui, mas você pode ver (e fazer o download) aqui:

link

    
por 18.08.2011 / 22:49
0

Isso talvez não seja exatamente o que você tinha em mente, mas uma ferramenta que eu uso para esses fins é Networkview . Ele irá revelar mais do que você está pedindo e vai custar alguns dólares, mas vale bem o preço. Por um tempo, você poderia usá-lo apenas no modo de avaliação.

    
por 17.11.2009 / 02:47
0

o que você está tentando fazer é errado meu amigo.

primeiro, o problema que você tem tem uma raiz e essa raiz está no Active Directory. Portanto, certifique-se de que o envelhecimento esteja definido corretamente e que os registros do DNS estejam definidos para serem limpos adequadamente.

do que getba lista com todos vocês ip, s no dns e ping-los sobre o Active Directory.

se o ip é desconhecido do que o pc está morto, você pode desativá-lo.

esse é o caminho mais difícil.

o caminho mais fácil é difícil:

execute isto no prompt de comando, mas certifique-se de que você é administrador de domínio e tenha as ferramentas de suporte do Windows instaladas na sua versão do Windows. Você pode baixá-los do site da Microsoft ou instalá-los em qualquer Windows XP ou Server 2003, dependendo do que você está executando.

dsquery computador último logon

provavelmente você gostaria de algo como o último logon do computador dsquery > c: \ deadpc.txt Agora, antes de você ir todo forense com que vai com este. dsquery computer -disabled > c: \ disabledpc.txt limpe aqueles primeiro

depois de tirar a maior parte deles, talvez você queira verificar se há SID duplicado

    
por 11.08.2010 / 04:59