Encontre impressoras com o Nmap

Respostas:

37

Se você está desconfiado de fazer impressão digital do SO por algum motivo, pode fazer uma verificação de porta mais direcionada:

nmap -p 9100,515,631 192.168.1.1/24 -oX printers.xml

Isso vai procurar por portas comuns a impressoras e sistemas de impressão.

  • 9100 = a porta RAW para a maioria das impressoras, também conhecida como porta IP direta
  • 515 = a porta LPR / LPD, para a maioria das impressoras e servidores de impressão mais antigos
  • 631 = a porta IPP, para as impressoras mais modernas, e servidor de impressão baseado em CUPS

A saída está em XML.

sysadmin1138
fonte
Sua resposta foi muito útil!
Ryan Tenney
Isto não funcionou para mim.
Martin Thoma
9

Esta resposta responde diretamente à sua primeira pergunta. Para a segunda pergunta, entender o comando também permitirá colocar os endereços IP da impressora em um arquivo. Aqui vamos nos:

nmap -p 515,631,9100 -oG - 10.81.129.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs --replace=$ipaddress snmpget -v 1 -O v -c public $ipaddress system.sysDescr.0 | sed 's/STRING:\s//'

Descrição do processo

  1. Ele verifica uma rede procurando por entidades de rede que estão escutando nas portas da impressora padrão.
  2. Usando os resultados da etapa anterior, ele verificará o suporte ao SNMP nesses dispositivos.
  3. Para cada dispositivo que possui suporte a SNMP, ele consulta a entidade da rede para obter uma descrição do dispositivo.

Divisão de comando

nmap - Digitalização em rede. ( Nmap.org )

  • -p 515,631,9100 Procure pelas portas TCP 515, 631 e 9100.
  • -oG - Use o formato de saída grepable.
  • -sU -p 161 Procure a porta UDP 161.

gawk ou awk - processa dados de texto orientados a colunas. Por padrão, os espaços em branco separam a linha em colunas. ( Wikipedia )

  • gawk '/regexp/' Use a expressão regulair com gawk para filtrar as linhas correspondentes a essa expressão regulair.
  • gawk '{<code>}' Use o idioma de entrada do tipo awk do tipo C para manipular a saída.
  • gawk '{/open/print $2}' Pesquise as linhas correspondentes a "aberto" e imprima a segunda coluna.

xarg - Constrói e executa comandos a partir de uma entrada especificada. Por padrão, os espaços em branco separam a linha em argumentos. ( Wikipedia )

  • --delimiter='\n' Argumentos separados por nova linha (\ n) em vez de espaço em branco.
  • --replace=$ipaddressPara cada linha, armazene o argumento em $ ipaddress .

snmpget ou snmpwalk - use a solicitação SNMP GET para consultar informações sobre uma entidade de rede. ( net-snmp.org , mais sobre SNMP na Wikipedia )

  • -c public Defina a sequência da comunidade como pública.
  • -v 1 Defina a versão SNMP como 1.
  • -O v Não imprima OID.
  • system.sysDescr.0Variável para consulta. Descrição desta variável específica: "Uma descrição textual da entidade. Esse valor deve incluir o nome completo e a identificação da versão do tipo de hardware do sistema, sistema operacional de software e software de rede. É obrigatório que isso contenha apenas caracteres ASCII imprimíveis. "

sed - Analisa e transforma o texto. ( Wikipedia )

  • 's/day/night/' Encontre a primeira ocorrência do dia da sequência em uma linha e substitua-a por noite.
  • 's/STRING:\s//'Encontre STRING: \ se substitua-o por nada. Isso remove STRING: \ s da entrada. \ s significa um espaço em branco.

Existem alguns comandos suportados pelo UNIX envolvidos. Pessoalmente, fiz essa cadeia funcionar em uma máquina Windows usando Cygwin para obter esses comandos.

Charlie Vieillard
fonte
2
No Linux, usei a seguinte variação para mostrar o IP e a string do sistema SNMP. O '--replace = $ ipaddress' não funcionou no meu ambiente:nmap -p 515,631,9100 -oG - 192.168.100.0/24 | gawk '/open/{print $2}' | xargs --delimiter='\n' nmap -sU -p 161 -oG - | gawk '/open/{print $2}' | xargs -I{} sh -c 'echo {} ; snmpget -v 1 -O v -c public {} system.sysDescr.0' | sed 's/STRING:\s//'
NoelProf
A versão do @NoelProf funciona muito bem no CentOS 6. Uma coisa que pode ser aprimorada é a parte da digitalização UDP. Eu tentei a cadeia inteira, mas algumas das impressoras não foram descobertas; especialmente quando eles estão atrás de uma VPN. Imaginei que é porque testamos apenas uma vez se eles responderem na porta UDP 161. Mas o UDP pode se perder no caminho. Seria melhor verificar várias vezes.
masgo
5

A maneira mais fácil é digitalizar com nmap -O: o nmap geralmente determinará corretamente se uma máquina é uma impressora ou não é baseada no sistema operacional.

nmap -O 192.168.1.1/24 -oG - | grep printer >> outfile

Deve criar uma entrada por linha e despejar em um arquivo chamado "outfile". Obviamente, altere o intervalo de ip para qualquer intervalo que você estiver digitalizando

Satanicpuppy
fonte