Wyjście tylko adresy IP maszyn online za pomocą nmap

19

Wiem, jak używać, nmapaby znaleźć listę hostów, które są obecnie online. Chciałbym uzyskać listę tylko ich adresów IP, teraz wyświetla dodatkowe informacje, takie jak

Nmap scan report for 192.168.x.x' and 'Host is up (0.12s latency).

Chciałbym móc uruchomić nmappolecenie, uzyskać dokument tekstowy z adresami IP, które są obecnie w trybie online.

Czy to w ogóle możliwe?

jasonwryan
źródło

Odpowiedzi:

33

To jest powszechne:

nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up$/{print $2}'

Szybki przegląd opcji i poleceń:

  • -nwyłącza odwrotne rozpoznawanie nazw, ponieważ potrzebujesz tylko adresów IP. W lokalnej sieci LAN jest to prawdopodobnie najwolniejszy krok, więc można uzyskać dobre przyspieszenie.
  • -snoznacza „Nie skanuj portów”. Jest taki sam jak starszy, przestarzały -sPz mnemonicznym „skanowaniem ping”.
  • -oG -wysyła wyjście „grepable” do standardowego wyjścia, do którego jest przesyłane potokowoawk .
  • /Up$/ zaznacza tylko te wiersze, które kończą się „Up”, co oznacza hosty online.
  • {print $2} wypisuje drugie pole oddzielone spacjami, czyli adres IP.
bonsaiviking
źródło
Dlaczego warto po $ /Up? Odkryłem, że polecenie nmap -n -sn 192.0.2.0/24 -oG - | awk '/Up/{print $2}'zapewnia takie same wyniki.
Michael
1
@Michael To tylko dodatkowy poziom bezpieczeństwa, aby upewnić się, że nie drukujemy śmieci, na wypadek gdyby coś innego zawierało ciąg „Up”. W ten sposób działa, nawet jeśli uruchomisz go na grepowym wyjściu w pliku z innego rodzaju skanowania, -sVktóry może zawierać nieprzewidywalne ciągi znaków z banerów usług sieciowych.
bonsaiviking
3

Możesz potokować go do awk:

nmap -sP 192.168.1.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
192.168.1.1
192.168.1.10
192.168.1.20
192.168.1.30
jasonwryan
źródło