Piton

Construirea propriului monitor de rețea cu PyShark

Construirea propriului monitor de rețea cu PyShark

Instrumentele existente

Multe instrumente pentru analiza rețelei există de ceva timp. În Linux, de exemplu, acestea sunt Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack, precum și vitezometru și ettercap. Pentru o descriere detaliată a acestora, puteți arunca o privire la comparația Silver Moon [1].

Deci, de ce să nu folosiți un instrument existent și să scrieți propriul dvs. instrument? Motivele pe care le văd sunt o mai bună înțelegere a protocoalelor de rețea TCP / IP, învățarea modului de codificare corect sau implementarea doar a funcției specifice de care aveți nevoie pentru cazul dvs. de utilizare, deoarece instrumentele existente nu vă oferă ceea ce aveți de fapt nevoie. În plus, îmbunătățirea vitezei și încărcării aplicației / sistemului dvs. poate juca, de asemenea, un rol care vă motivează să vă deplasați mai mult în această direcție.

În sălbăticie, există destul de multe biblioteci Python pentru procesarea și analiza rețelei. Pentru programarea la nivel scăzut, cheia este biblioteca de socketuri [2]. Bibliotecile bazate pe protocol de nivel înalt sunt httplib, ftplib, imaplib și smtplib. Pentru a monitoriza porturile de rețea și fluxul de pachete candidați competitivi, sunt folosiți python-nmap [3], dpkt [4] și PyShark [5]. Atât pentru monitorizarea, cât și pentru schimbarea fluxului de pachete, biblioteca scapy [6] este utilizată pe scară largă.

În acest articol, vom arunca o privire asupra bibliotecii PyShark și vom monitoriza ce pachete ajung la o anumită interfață de rețea. După cum veți vedea mai jos, lucrul cu PyShark este simplu. Documentația de pe site-ul web al proiectului vă va ajuta pentru primii pași - odată cu aceasta, veți obține un rezultat utilizabil foarte repede. Cu toate acestea, când vine vorba de nitty-gritty, sunt necesare mai multe cunoștințe.

PyShark poate face mult mai mult decât pare la prima vedere și, din păcate, la momentul scrierii acestui document, documentația existentă nu acoperă în totalitate acest lucru. Acest lucru îl face dificil inutil și oferă un motiv bun pentru a privi mai adânc sub capotă.

Despre PyShark

PyShark [8] este un învelitor Python pentru Tshark [10]. Pur și simplu își folosește capacitatea de a exporta date XML folosind analiza sa. Tshark în sine este versiunea din linia de comandă a Wireshark. Atât Tshark cât și PyShark depind de biblioteca Pcap care captează de fapt pachetele de rețea și este menținută sub capota Tcpdump [7]. PyShark este dezvoltat și întreținut continuu de Dan (el folosește numele KimiNewt pe Twitter).

Pentru a preveni o posibilă confuzie, există un instrument de sunet similar, Apache Spark [11], care este un motor de analiză unificat pentru prelucrarea datelor pe scară largă. Numele PySpark este folosit pentru interfața Python cu Apache Spark, despre care nu discutăm aici.

Instalarea PyShark

PyShark necesită instalarea atât a bibliotecii Pcap, cât și a lui Tshark. Pachetele corespunzătoare pentru Debian GNU / Linux 10 și Ubuntu se numesc libpcap0.8 și tshark și pot fi configurate după cum urmează folosind apt-get:

Listarea 1: Instalarea bibliotecii Pcap și Tshark

# pip3 instalează python-pyshark

Dacă nu sunt încă instalate, trebuie adăugate și Python3 și Pip. Pachetele corespunzătoare pentru Debian GNU / Linux 10 și Ubuntu se numesc python3 și python3-pip și pot fi instalate după cum urmează folosind apt-get:

Listarea 2: Instalați Python 3 și PIP pentru Python 3

# apt-get install python3 python3-pip

Acum este timpul să adăugați PyShark. Pe baza cercetărilor noastre, PyShark nu este încă ambalat pentru nicio distribuție majoră Linux. Instalarea acestuia se face folosind programul de instalare a pachetelor Python pip3 (pip pentru Python 3) ca pachet la nivel de sistem, după cum urmează:

Listarea 3: Instalați PyShark utilizând PIP

# pip3 instalează python-pyshark

Acum, PyShark este gata să fie utilizat în scripturile Python de pe sistemul dvs. Linux. Vă rugăm să rețineți că executați scripturile Python de mai jos ca utilizator administrativ, de exemplu, folosind sudo deoarece biblioteca Pcap nu vă permite să căutați pachete ca utilizator obișnuit.

Următoarea declarație adaugă conținutul modulului PyShark la spațiul de nume al scriptului dvs. Python:

Listarea 4: Importați modulul PyShark

import pyshark

Metode de captare a pachetelor

Din cutie, PyShark vine cu două moduri diferite cu care oferă colectarea pachetelor de pe interfața de rețea observată. Pentru colectarea continuă, utilizați metoda LiveCapture (), iar pentru salvarea într-un fișier local, utilizați metoda FileCapture () din modulul PyShark. Rezultatul este o listă de pachete (obiect Python iterator) care vă permite să parcurgeți pachetele de date capturate cu pachet. Listele de mai jos demonstrează modul de utilizare a celor două metode.

Listarea 5: Utilizați PyShark pentru a captura din prima interfață Wifi wlan0

import pyshark
capture = pyshark.LiveCapture (interface = 'wlan0')

Cu declarațiile anterioare, pachetele de rețea capturate sunt păstrate în memorie. Memoria disponibilă ar putea fi limitată, cu toate acestea, stocarea pachetelor capturate într-un fișier local este o alternativă. Se folosește formatul de fișier Pcap [9]. Acest lucru vă permite să procesați și să interpretați datele capturate de alte instrumente care sunt conectate și la biblioteca Pcap.

Listarea 6: Utilizați PyShark pentru a stoca pachetele capturate într-un fișier local

import pyshark
capture = pyshark.FileCapture ('/ tmp / pachete de rețea.capac')

Rulând listele 5 și 6, nu veți avea încă nicio ieșire. Următorul pas este de a restrânge pachetele care trebuie colectate mai precis pe baza criteriilor dorite.

Selectarea pachetelor

Obiectul de captură introdus anterior stabilește o conexiune la interfața dorită. Apoi, cele două metode sniff () și sniff_continuously () ale obiectului de captare colectează pachetele de rețea. sniff () revine apelantului imediat ce toate pachetele solicitate au fost colectate. În schimb, sniff_continuously () livrează un singur pachet către apelant imediat ce a fost colectat. Acest lucru permite un flux live al traficului de rețea.

În plus, cele două metode vă permit să specificați diferite limitări și mecanismul de filtrare a pachetelor, de exemplu, numărul de pachete care utilizează parametrul pachet_count și perioada în care pachetele trebuie colectate utilizând parametrul timeout. Listarea 7 demonstrează cum să colectați 50 de pachete de rețea, numai ca flux live, folosind metoda sniff_continuously ().

Listarea 7: Colectați 50 de pachete de rețea de la wlan0

import pyshark
capture = pyshark.LiveCapture (interface = 'wlan0')
pentru pachetul în captură.sniff_continuously (packet_count = 5):
print (pachet)

Diverse detalii despre pachete sunt vizibile folosind instrucțiunea de imprimare (pachet) (vezi Figura 1).

Figura 1: conținutul pachetului

În lista 7, ați colectat tot felul de pachete de rețea, indiferent de protocol sau port de serviciu. PyShark vă permite să efectuați filtrarea avansată, utilizând așa-numitul filtru BPF [12]. Listarea 8 demonstrează cum se colectează 5 pachete TCP care intră prin portul 80 și tipăresc tipul de pachet. Informațiile sunt stocate în atributul pachet cel mai înalt.

Listarea 8: Colectarea pachetelor TCP, numai

import pyshark
capture = pyshark.LiveCapture (interfață = 'wlan0', bpf_filter = 'tcp port 80')
captură.sniff (packet_count = 5)
print (captură)
pentru pachetul în captură:
print (pachet.cel mai înalt strat)

Salvați lista 8, ca fișier tcp-sniff.py și rulați scriptul Python. Ieșirea este după cum urmează:

Listarea 9: ieșirea din Listarea 8

# python3 tcp-sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Deconectarea pachetelor capturate

Obiectul capturat funcționează ca o păpușă rusă Matroska - strat cu strat, conține conținutul pachetului de rețea corespunzător. Unboxingul se simte un pic ca Crăciunul - nu știi niciodată ce informații găsești înăuntru până nu le deschizi. Listarea 10 demonstrează captarea a 10 pachete de rețea și dezvăluirea tipului său de protocol, atât portul sursă, cât și destinația și adresa.

Listarea 10: Se afișează sursa și destinația pachetului capturat

import pyshark
timpul de import
# definiți interfața
networkInterface = "enp0s3"
# define obiect de captare
capture = pyshark.LiveCapture (interface = networkInterface)
print („ascultare pe% s”% networkInterface)
pentru pachetul în captură.sniff_continuously (packet_count = 10):
# ieșire ajustată
încerca:
# obține timestamp
localtime = time.asctime (timp.localtime (time.timp()))
# obțineți conținut pachet
protocol = pachet.transport_layer # tip protocol
src_addr = pachet.ip.src # adresa sursă
src_port = pachet [protocol].srcport # port sursă
dst_addr = pachet.ip.dst # adresa de destinație
dst_port = pachet [protocol].dstport # port de destinație
# informații despre pachetul de ieșire
print („% s IP% s:% s <-> % s:% s (% s) "% (localtime, src_addr, src_port, dst_addr, dst_port, protocol))
cu excepția AttributeError ca e:
# ignorați alte pachete decât TCP, UDP și IPv4
trece
imprimare (" ")

Scriptul generează o ieșire, așa cum se arată în Figura 2, o singură linie per pachet primit. Fiecare linie începe cu un timestamp, urmat de adresa IP și portul sursă, apoi adresa IP și portul de destinație și, în cele din urmă, tipul de protocol de rețea.


Figura 2: Sursa și destinația pachetelor capturate

Concluzie

Construirea propriului scaner de rețea nu a fost niciodată mai ușoară decât atât. Bazat pe bazele Wireshark, PyShark vă oferă un cadru cuprinzător și stabil pentru a monitoriza interfețele de rețea ale sistemului dvs. în modul în care îl solicitați.

Linkuri și referințe

  • [1] Silver Moon: 18 comenzi pentru monitorizarea lățimii de bandă a rețelei pe serverul Linux, https: // www.maree binare.com / linux-comenzi-monitor-rețea /
  • [2] Python socket library, https: // docs.piton.org / 3 / library / socket.html
  • [3] python-nmap, https: // pypi.org / project / python3-nmap /
  • [4] dpkt, https: // pypi.org / project / dpkt /
  • [5] PyShark, https: // pypi.org / project / pyshark /
  • [6] scapy, https: // pypi.org / proiect / scapy /
  • [7] Tcpdump și libpcap, http: // www.tcpdump.org /
  • [8] PyShark, site-ul web al proiectului, http: // kiminewt.github.io / pyshark /
  • [9] Format fișier Libpcap, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wikis / Development / LibpcapFileFormat
  • [10] Tshark, https: // www.wireshark.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // spark.apache.org /
  • [12] Filtru BPF, https: // wiki.wireshark.org / CaptureFilters
Cursor jumps or moves randomly while typing in Windows 10
If you find that your mouse cursor jumps or moves on its own, automatically, randomly while typing in Windows laptop or computer, then some of these s...
How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...
How to change Mouse pointer and cursor size, color & scheme on Windows 10
The mouse pointer and cursor in Windows 10 are very important aspects of the operating system. This can be said for other operating systems as well, s...