GNU/Linux >> Belajar Linux >  >> Linux

Pelajari cara mendeteksi peralatan jaringan dengan Scientific Linux 7.1 dan Python

Terkadang Anda mungkin memiliki masalah jaringan atau firewall di internal yang memerlukan pemindaian jaringan untuk menemukan alamat IP mana yang digunakan. Untuk tujuan itu, kita dapat menggunakan alat yang sudah jadi seperti nmap, zmap, atau angryIP. Namun jika kita tidak memiliki akses internet untuk mendownload tools tersebut kita bisa melakukan scan dengan hanya menggunakan perintah manual. Namun, pemindaian manual bisa sangat membosankan, dengan pemahaman yang harus dilakukan untuk setiap alamat IP yang diberikan di jaringan kita.

Dengan mempertimbangkan hal di atas, saya akan menunjukkan dalam tutorial ini bagaimana kita dapat mengotomatisasi tugas ini dengan menggunakan Python, mengetahui bahwa python tersedia di hampir semua distro Linux yang tersedia di pasar.

Python adalah pilihan yang sempurna untuk ini karena memungkinkan kita untuk mengotomatisasi setiap tugas yang dapat dijalankan oleh OS, kita hanya perlu menggunakan perpustakaan yang benar.

Menggunakan Perpustakaan Linux dengan Python

Fokus studi kami saat ini adalah perintah ping sweep, untuk mendeteksi semua peralatan yang terhubung dan dihidupkan di jaringan kami. Script yang kami buat membuat ping ke setiap alamat IP di jaringan. Misalnya kita menggunakan subnet mask / 24, itu akan loop hanya melalui 3 oktet pertama dari IP. Hal pertama yang harus kita pertimbangkan untuk skrip ini adalah pustaka sistem mana yang dapat digunakan untuk tugas tersebut, kita harus mengimpor pustaka sys dan subproses. Pustaka ini memungkinkan penggunaan perintah khusus dari interpreter python dan sistem operasi itu sendiri, dalam hal ini Scientific Linux 7.1.

import sys, subprocess

Saya akan menyimpan skrip saya dengan nama networkmonitor.py.

Mendeteksi Argumen yang tepat

Saat kita menjalankan script dengan menggunakan perintah

>>python networkmonitor.py 10.0.0.

di shell, jika argumen pada perintah salah (jika len(sys.argv)<>2:), skrip akan menampilkan contoh yang benar. (cetak "networkmonitor.py 10.0.0.").

Argumennya adalah alamat IP dari subnet yang dipindai, hanya 3 oktet pertama yang digunakan. Jadi jika argumennya benar, maka hasil dari perintah "ping -c1"+sys.argv[1] akan disimpan dalam sebuah variabel, dalam kasus kita adalah cmdping,  sys.argv[1] adalah variabel "argumen" dalam modul sys dan akan menyimpan argumen pertama yang diberikan ke skrip. Di lingkungan UNIX kita harus menggunakan ping -c1 karena perintah ping akan berjalan tanpa batas.

if len(sys.argv)<>2:
    print "networkmonitor 10.0.0."

Perintah Subproses, argumennya, dan for loop


Pada baris berikutnya dimulai perulangan for, yang dijalankan hingga mencapai batas (kondisi berhenti) yang kita tetapkan, kondisi tersebut adalah range IP yang ingin kita scan. Pada titik ini, penting untuk mempertimbangkan waktu yang dibutuhkan skrip untuk memindai rentang, semakin besar rentang semakin lama skrip akan berjalan. Subprocess.Popen  memungkinkan kita meluncurkan perintah shell dan menunggu hingga selesai. Setelah selesai, kami memeriksa status bahwa perintah kembali. Cmdping+str(x), dieksekusi oleh subproses.Buka , meningkatkan indeks untuk IP yang diberikan oleh argumen pada setiap siklus perulangan for.

Shell=true berarti proses akan dijalankan di Shell. Namun, situs web dokumen Python memperingatkan tentang bahaya menggunakan shell=true, jadi berhati-hatilah dengan perintah yang Anda jalankan. Argumen subprocess.PIPE using as stderr menunjukkan bahwa Python akan membuka pipa ke aliran standar.

for x in range(99,110):
        p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)

Dalam hal ini, kami hanya menguji sebelas Alamat IP (dari 99 hingga 110).

Sekarang kita harus memeriksa isi stderr, kita akan berhenti (break) ketika variabel kosong, jika tidak kita tampilkan stdout  konten.

out = p.stderr.read(1)
            if out == '' and p.poll() != None:
                break
            if out != '':
                sys.stdout.write(out)
                sys.stdout.flush()

Kode terakhir ini harus dijalankan jika shell tetap dalam keadaan benar.

Kode Lengkapnya sekarang:

import sys, subprocess
if len(sys.argv)<>2:
    print "networkmonitor 10.0.0."
else:
    cmdping ="ping -c1 "+sys.argv[1]
    for x in range(99,110):
        p = subprocess.Popen(cmdping+str(x), shell=True, stderr=subprocess.PIPE)
        while True:
            out = p.stderr.read(1)
            if out == '' and p.poll() != None:
                break
            if out != '':
                sys.stdout.write(out)
                sys.stdout.flush()

Output dari skrip kecil kami adalah:



Seperti terlihat pada screenshot, alat ini hanya melakukan ping untuk mendapatkan jawaban positif atau negatif kemudian pindah ke alamat IP berikutnya, dan seterusnya untuk menganalisis seluruh rentang alamat.

Harus disebutkan bahwa saya tidak mengklaim kepemilikan kode yang dianalisis di atas. Saya hanya menjelaskan fungsinya selangkah demi selangkah untuk mendapatkan pemahaman yang lebih baik tentang perintah sistem dan fungsi jaringan. Saya akan memberikan kredit kepada penulisnya.


Linux
  1. Cara Mengatur Alamat IP Statis dan Konfigurasi Jaringan di Linux

  2. Flatpak di Linux:Apa Itu dan Bagaimana Menginstal Aplikasi dengannya

  3. Cara Mengelola Beberapa Versi Python Dengan Pyenv Di Linux

  1. Cara menginstal Python di Linux

  2. Cara Bekerja Dengan Pengguna Dan Grup Di Linux

  3. Bagaimana Memantau Penggunaan Jaringan dengan nload di Linux?

  1. Cara Menemukan File Dengan Izin SUID dan SGID di Linux

  2. Aljabar Vektor di Scientific Linux 7.1 dengan Python Script:Bagian 1

  3. Pelajari Cara Zip dan Unzip File di Linux dan jadilah Master Zip