Temukan Printer dengan Nmap

Jawaban:

37

Jika Anda ragu melakukan Sidik Jari OS karena alasan tertentu, Anda dapat melakukan pemindaian port yang lebih bertarget:

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

Itu akan memindai port umum untuk printer dan sistem pencetakan.

  • 9100 = port RAW untuk sebagian besar printer, juga dikenal sebagai port IP langsung
  • 515 = port LPR / LPD, untuk sebagian besar printer, serta server cetak yang lebih lama
  • 631 = port IPP, untuk sebagian besar printer modern, dan server cetak berbasis CUPS

Output dalam XML.

sysadmin1138
sumber
Jawaban Anda sangat membantu!
Ryan Tenney
Ini tidak berhasil untuk saya.
Martin Thoma
9

Balasan ini menjawab pertanyaan pertama Anda secara langsung. Untuk pertanyaan kedua, memahami perintah akan membiarkan Anda juga memasukkan alamat IP printer ke file. Jadi di sini kita mulai:

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//'

Deskripsi proses

  1. Ini memindai jaringan mencari entitas jaringan yang mendengarkan pada port printer default.
  2. Dengan menggunakan hasil dari langkah sebelumnya itu akan memeriksa dukungan SNMP pada perangkat ini.
  3. Untuk setiap perangkat yang memiliki dukungan SNMP, ia menanyakan entitas jaringan untuk deskripsi perangkat.

Perintah rusak

nmap - Pemindaian jaringan. ( Nmap.org )

  • -p 515,631,9100 Pindai TCP Port 515, 631 dan 9100.
  • -oG - Gunakan format output grep-mampu.
  • -sU -p 161 Pindai port UDP 161.

gawk or awk - Memproses data teks berorientasi kolom. Secara default, spasi putih memisahkan garis menjadi kolom. ( Wikipedia )

  • gawk '/regexp/' Gunakan ekspresi regulair dengan gawk untuk memfilter garis yang cocok dengan ekspresi regulair ini.
  • gawk '{<code>}' Gunakan bahasa input mirip-C awk untuk memanipulasi output.
  • gawk '{/open/print $2}' Cari baris yang cocok dengan "terbuka" dan cetak kolom kedua.

xarg - Membangun dan menjalankan perintah dari input yang diberikan. Secara default spasi putih memisahkan baris menjadi argumen. ( Wikipedia )

  • --delimiter='\n' Pisahkan argumen per baris baru (\ n) alih-alih spasi putih.
  • --replace=$ipaddressUntuk setiap baris, simpan argumen ke $ ipaddress .

snmpget atau snmpwalk - Gunakan permintaan SNMP GET untuk menanyakan informasi tentang entitas jaringan. ( net-snmp.org , lebih lanjut tentang SNMP di Wikipedia )

  • -c public Setel string komunitas ke publik.
  • -v 1 Setel versi SNMP ke 1.
  • -O v Jangan cetak OID.
  • system.sysDescr.0Variabel ke kueri. Deskripsi variabel khusus ini: "Deskripsi tekstual entitas. Nilai ini harus mencakup nama lengkap dan identifikasi versi dari jenis perangkat keras sistem, sistem operasi perangkat lunak, dan perangkat lunak jaringan. Ini wajib bahwa ini hanya berisi karakter ASCII yang dapat dicetak. "

sed - Memilah dan mengubah teks. ( Wikipedia )

  • 's/day/night/' Temukan kemunculan pertama string day dalam satu baris, dan gantilah dengan malam.
  • 's/STRING:\s//'Temukan STRING: dan ganti dengan apa pun. Ini menghapus STRING: dari input. \ s singkatan spasi a.

Ada beberapa perintah yang didukung UNIX yang terlibat. Secara pribadi saya membuat rantai ini bekerja pada mesin Windows menggunakan Cygwin untuk mendapatkan perintah-perintah itu.

Charlie Vieillard
sumber
2
Di Linux saya menggunakan variasi berikut untuk menunjukkan IP dan string sistem SNMP. '--Replace = $ ipaddress' tidak berfungsi di lingkungan saya: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
Versi @NoelProf berfungsi dengan baik di CentOS 6. Satu hal yang mungkin diperbaiki adalah bagian pemindaian UDP. Saya mencoba seluruh rantai, tetapi beberapa printer di mana tidak ditemukan; terutama ketika mereka berada di belakang VPN. Saya pikir itu karena kami hanya menguji tepat sekali jika mereka menjawab pada port UDP 161. Tapi UDP mungkin tersesat di jalan. Akan lebih baik untuk memeriksanya beberapa kali.
masgo
5

Cara termudah adalah memindai dengan nmap -O: nmap biasanya akan menentukan dengan benar apakah sebuah mesin adalah printer atau tidak berdasarkan OS.

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

Seharusnya membuatnya menjadi satu entri per baris dan membuangnya ke file yang disebut "outfile". Jelas mengubah rentang ip ke rentang apa pun yang Anda pindai

Satanicpuppy
sumber