nmap para awk to sed. Existe uma maneira melhor?

4

Eu tenho um projeto onde eu sei que um único computador e uma única impressora serão as únicas coisas na rede. O que eu quero fazer é detectar quando a impressora está conectada à rede. Eu também sei que o computador é 192.168.3.1 . No entanto, com o DHCP, não conheço o endereço da impressora (sim, pode ser tornado estático para facilitar, mas "eles não gostam disso". Eles querem dinamismo)

O que eu tenho é um script que faz o seguinte e funciona.

nmap -sP 192.168.3.0/24 \
  | awk '/192.168.3/ && !/192.168.3.1$/' \
  | sed 's/Nmap scan report for //'

saída do Nmap

 Nmap scan report for 192.168.3.1
 Host is up (0.014s latency).
 Nmap scan report for 192.168.3.100
 Host is up (0.012s latency).
 Nmap done: 256 IP addresses (2 hosts up) scanned in 2.54 seconds

Saída de script

 192.168.3.100

Leva apenas alguns segundos para trabalhar, mas existe uma maneira melhor / mais limpa / mais rápida?

    
por Mike Kangas 11.04.2018 / 23:27

4 respostas

8

Não há necessidade de verificar toda a sub-rede se você não estiver interessado em parte dela. (Evitar o computador significa que você não precisa descartar seu resultado).

nmap -oG - -sn 192.168.3.2-254 | awk '$NF=="Up" {print $2}'

ou se você preferir usar a saída XML em vez da grep output

nmap -oX - -sP 192.168.3.2-254 | xmlstarlet sel -t -m '//address[@addrtype="ipv4"]' -v '@addr' -n

Use -sP em vez do mais recente -sn se sua versão de nmap exigir isso.

Incidentalmente, embora os administradores do sistema possam querer que você tenha sua impressora no DHCP, deve haver poucas razões para que eles não consigam que ela tenha um endereço imutável conhecido. (Eu faço isso para impressoras em minhas redes para que o software da impressora não precise se preocupar com a mudança inesperada de endereços IP.) Às vezes, isso é conhecido como um endereço "fixo", para diferenciá-lo de um endereço estático (não-DHCP) ou um endereço dinâmico pseudo-aleatório (DHCP).

Tem certeza de que o próprio servidor DHCP não estará na sua sub-rede? Caso contrário, como sua impressora obterá seu endereço dinâmico?

    
por 12.04.2018 / 00:10
11

Você pode fazer isso com o seguinte comando awk :

nmap -sP 192.168.3.0/24 \
  | awk '/192.168.3/ && !/192.168.3.1$/{print $NF}'

Isso está dizendo awk para imprimir o último campo da (s) linha (s) combinada (s)

    
por 11.04.2018 / 23:44
3

Talvez uma solução ainda mais eficiente usando apenas grep (requer grep ou grep que suporta perl regex):

nmap -sP 192.168.3.0/24 \
  | grep -o -P '192.168.3.(?!1$)[0-9]+'

Isso é necessário para -o (apenas) o endereço IP correspondente a qualquer IP que comece com 192.168.3 , exceto 192.168.3.1

    
por 12.04.2018 / 00:00
0

Quando tiver o endereço IP da impressora, você poderá obter o nome do host com nmblookup -A 'IP address' . Isso deve ajudar no futuro se o IP mudar, já que você estará pedindo à rede por uma máquina com esse nome, ao tentar encontrar uma máquina pelo endereço IP.

    
por 12.04.2018 / 15:29

Tags