Python

Membangun Monitor Rangkaian anda sendiri dengan PyShark

Membangun Monitor Rangkaian anda sendiri dengan PyShark

Alat yang ada

Banyak alat untuk analisis rangkaian telah wujud sejak beberapa lama. Di Linux, sebagai contoh, ini adalah Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack serta speedometer dan ettercap. Untuk penerangan terperinci mengenai mereka, anda mungkin melihat perbandingan Silver Moon [1].

Oleh itu, mengapa tidak menggunakan alat yang ada, dan tulis sendiri? Sebab yang saya lihat adalah pemahaman yang lebih baik mengenai protokol rangkaian TCP / IP, belajar bagaimana membuat kod dengan betul, atau hanya menerapkan ciri khusus yang anda perlukan untuk kes penggunaan anda kerana alat yang ada tidak memberikan apa yang sebenarnya anda perlukan. Tambahan pula, peningkatan kelajuan dan beban pada aplikasi / sistem anda juga dapat memainkan peranan yang mendorong anda untuk bergerak lebih banyak ke arah ini.

Di alam liar, terdapat beberapa perpustakaan Python untuk pemprosesan dan analisis rangkaian. Untuk pengaturcaraan tahap rendah, pustaka soket [2] adalah kuncinya. Perpustakaan berasaskan protokol peringkat tinggi adalah HTTPLib, ftplib, imaplib, dan smtplib. Untuk memantau port rangkaian dan calon pesaing aliran paket, adakah python-nmap [3], dpkt [4], dan PyShark [5] digunakan. Untuk memantau dan mengubah aliran paket, perpustakaan scapy [6] banyak digunakan.

Dalam artikel ini, kita akan melihat perpustakaan PyShark dan memantau paket mana yang tiba di antara muka rangkaian tertentu. Seperti yang anda lihat di bawah ini, bekerja dengan PyShark sangat mudah. Dokumentasi di laman web projek akan membantu anda untuk langkah pertama - dengan itu, anda akan mencapai hasil yang dapat digunakan dengan cepat. Walau bagaimanapun, mengenai hal yang menarik, lebih banyak pengetahuan diperlukan.

PyShark boleh melakukan lebih banyak daripada yang dilihat pada pandangan pertama, dan malangnya, pada masa penulisan ini, dokumentasi yang ada tidak merangkumi sepenuhnya. Ini menjadikannya tidak perlu sukar dan memberikan alasan yang baik untuk melihat lebih dalam bonet.

Mengenai PyShark

PyShark [8] adalah pembungkus Python untuk Tshark [10]. Ia hanya menggunakan kemampuannya untuk mengeksport data XML menggunakan penghuraiannya. Tshark sendiri adalah versi baris perintah Wireshark. Kedua-dua Tshark dan PyShark bergantung pada perpustakaan Pcap yang benar-benar menangkap pakej rangkaian dan dikekalkan di bawah tcpdump [7]. PyShark dikembangkan dan dikekalkan secara berterusan oleh Dan (dia menggunakan nama KimiNewt di Twitter).

Untuk mengelakkan kekeliruan, ada alat yang serupa, Apache Spark, yang merupakan mesin analisis terpadu untuk pemprosesan data berskala besar. Nama PySpark digunakan untuk antara muka Python ke Apache Spark, yang tidak kita bincangkan di sini.

Memasang PyShark

PyShark memerlukan perpustakaan Pcap dan Tshark dipasang. Pakej yang sesuai untuk Debian GNU / Linux 10 dan Ubuntu dinamakan libpcap0.8 dan tshark dan boleh disiapkan seperti berikut menggunakan apt-get:

Penyenaraian 1: Memasang perpustakaan Pcap dan Tshark

# pip3 memasang python-pyshark

Sekiranya belum dipasang, Python3 dan Pip juga harus ditambah. Pakej yang sesuai untuk Debian GNU / Linux 10 dan Ubuntu diberi nama python3 dan python3-pip dan boleh dipasang seperti berikut menggunakan apt-get:

Penyenaraian 2: Pasang Python 3 dan PIP untuk Python 3

# apt-get pasang python3 python3-pip

Kini tiba masanya untuk menambah PyShark. Berdasarkan kajian kami, PyShark belum dikemas untuk sebaran Linux utama. Pemasangannya dilakukan menggunakan pemasang paket Python pip3 (pip untuk Python 3) sebagai pakej seluruh sistem seperti berikut:

Penyenaraian 3: Pasang PyShark menggunakan PIP

# pip3 memasang python-pyshark

Sekarang, PyShark sudah siap digunakan dalam skrip Python pada sistem Linux anda. Harap perhatikan untuk melaksanakan skrip Python di bawah sebagai pengguna pentadbiran, misalnya, menggunakan sudo kerana perpustakaan Pcap tidak membenarkan anda mencari pakej sebagai pengguna biasa.

Pernyataan berikut menambahkan kandungan modul PyShark ke ruang nama skrip Python anda:

Penyenaraian 4: Import modul PyShark

import pyshark

Kaedah Menangkap Pakej

Di luar kotak, PyShark hadir dengan dua mod berbeza yang ditawarkannya untuk mengumpulkan paket dari antara muka rangkaian yang diperhatikan. Untuk pengumpulan berterusan, gunakan kaedah LiveCapture (), dan untuk menyimpan ke fail tempatan, gunakan kaedah FileCapture () dari modul PyShark. Hasilnya adalah senarai pakej (objek Python iterator) yang membolehkan anda melalui pakej data yang diambil dengan pakej. Senarai di bawah menunjukkan bagaimana menggunakan dua kaedah.

Penyenaraian 5: Gunakan PyShark untuk menangkap dari antara muka Wifi pertama wlan0

import pyshark
tangkapan = pyshark.LiveCapture (antara muka = ​​'wlan0')

Dengan pernyataan sebelumnya, pakej rangkaian yang ditangkap disimpan dalam ingatan. Memori yang tersedia mungkin terhad, bagaimanapun, menyimpan pakej yang ditangkap dalam fail tempatan adalah alternatif. Yang digunakan adalah format fail Pcap [9]. Ini membolehkan anda memproses dan menafsirkan data yang diambil dengan alat lain yang dihubungkan ke perpustakaan Pcap juga.

Penyenaraian 6: Gunakan PyShark untuk menyimpan pakej yang ditangkap dalam fail tempatan

import pyshark
tangkapan = pyshark.FileCapture ('/ tmp / rangkaian rangkaian.topi ')

Menjalankan senarai 5 dan 6, anda belum akan mempunyai sebarang output. Langkah seterusnya adalah mengecilkan bungkusan yang akan dikumpulkan dengan lebih tepat berdasarkan kriteria yang anda inginkan.

Memilih Paket

Objek penangkapan yang diperkenalkan sebelumnya membuat sambungan ke antara muka yang diinginkan. Seterusnya, dua kaedah sniff () dan sniff_continuously () objek menangkap mengumpulkan paket rangkaian. sniff () kembali kepada pemanggil sebaik sahaja semua paket yang diminta telah dikumpulkan. Sebaliknya, sniff_continuously () memberikan satu paket kepada pemanggil sebaik sahaja ia dikumpulkan. Ini membolehkan aliran langsung lalu lintas rangkaian.

Selain itu, dua kaedah tersebut membolehkan anda menentukan pelbagai batasan dan mekanisme penyaringan pakej, misalnya, jumlah paket yang menggunakan parameter_paket_kiraan, dan tempoh di mana pakej tersebut akan dikumpulkan menggunakan batas waktu parameter. Penyenaraian 7 menunjukkan cara mengumpulkan 50 paket rangkaian, hanya, sebagai aliran langsung, menggunakan kaedah sniff_continuously ().

Penyenaraian 7: Kumpulkan 50 pakej rangkaian dari wlan0

import pyshark
tangkapan = pyshark.LiveCapture (antara muka = ​​'wlan0')
untuk paket dalam tangkapan.sniff_continuously (jumlah paket = 5):
cetak (paket)

Pelbagai butiran paket dapat dilihat menggunakan cetakan pernyataan (paket) (lihat Gambar 1).

Gambar 1: kandungan pakej

Dalam senarai 7, anda mengumpulkan semua jenis paket rangkaian tidak kira apa protokol atau port perkhidmatan. PyShark membolehkan anda melakukan penapisan lanjutan, menggunakan apa yang disebut penapis BPF [12]. Penyenaraian 8 menunjukkan cara mengumpulkan 5 paket TCP yang masuk melalui port 80 dan mencetak jenis paket. Maklumat disimpan dalam atribut packet tertinggi_layer.

Penyenaraian 8: Mengumpulkan pakej TCP sahaja

import pyshark
tangkapan = pyshark.LiveCapture (antara muka = ​​'wlan0', bpf_filter = 'tcp port 80')
tangkap.mengendus (jumlah paket = 5)
mencetak (menangkap)
untuk paket dalam tangkapan:
mencetak (paket.lapisan_ tertinggi)

Simpan senarai 8, sebagai fail tcp-sniff.py, dan jalankan skrip Python. Keluarannya adalah seperti berikut:

Penyenaraian 9: Keluaran Penyenaraian 8

# python3 tcp-menghidu.py

TCP
TCP
TCP
OCSP
TCP
#

Membuka kotak paket yang ditangkap

Objek yang ditangkap berfungsi sebagai boneka Matroska Rusia - lapisan demi lapisan, ia mengandungi kandungan paket rangkaian yang sesuai. Membuka kotak seperti Krismas - anda tidak akan pernah mengetahui maklumat yang anda dapati sehingga anda membukanya. Penyenaraian 10 menunjukkan menangkap 10 paket rangkaian dan menunjukkan jenis protokolnya, baik sumber dan port tujuan dan alamat.

Penyenaraian 10: Menunjukkan sumber dan tujuan paket yang ditangkap

import pyshark
masa import
# tentukan antara muka
networkInterface = "enp0s3"
# tentukan objek tangkap
tangkapan = pyshark.LiveCapture (antara muka = ​​rangkaianInterface)
cetak ("mendengar pada% s"% networkInterface)
untuk paket dalam tangkapan.sniff_continuently (packet_count = 10):
# output disesuaikan
cuba:
# dapatkan cap waktu
waktu tempatan = masa.waktu waktu (masa.waktu tempatan (waktu.masa()))
# dapatkan kandungan paket
protokol = paket.transport_layer # jenis protokol
src_addr = paket.ip.src # alamat sumber
src_port = paket [protokol].port sumber # srcport
dst_addr = paket.ip.dst # alamat destinasi
dst_port = paket [protokol].dstport # pelabuhan destinasi
# maklumat paket keluaran
cetak ("% s IP% s:% s <-> % s:% s (% s) "% (waktu tempatan, src_addr, src_port, dst_addr, dst_port, protokol))
kecuali AttributeError sebagai e:
# abaikan paket selain daripada TCP, UDP dan IPv4
lulus
cetak ("")

Skrip menghasilkan output, seperti yang ditunjukkan pada Gambar 2, satu baris per paket yang diterima. Setiap baris dimulakan dengan cap waktu, diikuti dengan alamat dan sumber IP sumber, kemudian alamat dan port IP tujuan, dan, akhirnya, jenis protokol rangkaian.


Gambar 2: Sumber dan tujuan untuk pakej yang ditangkap

Kesimpulannya

Membangun pengimbas rangkaian anda sendiri tidak pernah semudah ini. Berdasarkan asas Wireshark, PyShark menawarkan kerangka kerja yang komprehensif dan stabil untuk memantau antara muka rangkaian sistem anda dengan cara yang anda perlukan.

Pautan dan Rujukan

  • [1] Perak Bulan: 18 Perintah untuk Memantau Lebar Jalur Rangkaian di pelayan Linux, https: // www.gelombang binari.com / linux-perintah-monitor-rangkaian /
  • [2] Pustaka soket Python, https: // docs.ular sawa.org / 3 / perpustakaan / soket.html
  • [3] python-nmap, https: // pypi.org / projek / python3-nmap /
  • [4] dpkt, https: // pypi.org / projek / dpkt /
  • [5] PyShark, https: // pypi.org / projek / pyshark /
  • [6] scapy, https: // pypi.org / projek / scapy /
  • [7] Tcpdump dan libpcap, http: // www.tcpdump.org /
  • [8] PyShark, laman web projek, http: // kiminewt.github.io / pyshark /
  • [9] Format Fail Libpcap, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wiki / Pembangunan / LibpcapFileFormat
  • [10] Tshark, https: // www.wireshark.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // percikan.apache.org /
  • [12] Penapis BPF, https: // wiki.wireshark.org / CaptureFilters
Cara Menunjukkan Kaunter FPS dalam Permainan Linux
Permainan Linux mendapat dorongan utama ketika Valve mengumumkan sokongan Linux untuk klien Steam dan permainan mereka pada tahun 2012. Sejak itu, ban...
Cara memuat turun dan Mainkan Sid Meier's Civilization VI di Linux
Pengenalan permainan Civilization 6 adalah konsep moden mengenai konsep klasik yang diperkenalkan dalam siri permainan Age of Empires. Idea itu cukup ...
Cara Memasang dan Memainkan Doom di Linux
Pengenalan Doom Seri Doom berasal dari tahun 90an selepas pembebasan Doom yang asal. Ini adalah hit seketika dan sejak saat itu dan seterusnya siri pe...