Respostas:
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.
A saída está em XML.
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//'
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=$ipaddress
Para 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.0
Variá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.
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//'
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