Piton

Izgradnja vlastitog mrežnog monitora s PySharkom

Izgradnja vlastitog mrežnog monitora s PySharkom

Postojeći alati

Mnogi alati za mrežnu analizu postoje već duže vrijeme. Na primjer, pod Linuxom su to Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack kao i brzinomjer i ettercap. Za njihov detaljan opis možete pogledati usporedbu Silver Moon-a [1].

Pa, zašto ne biste koristili postojeći alat i umjesto toga napisali svoj? Razlozi koje vidim su bolje razumijevanje TCP / IP mrežnih protokola, učenje pravilnog kodiranja ili primjena samo određene značajke koja vam je potrebna za vaš slučaj upotrebe jer postojeći alati ne daju vam ono što zapravo trebate. Nadalje, poboljšanja brzine i opterećenja vaše aplikacije / sustava također mogu igrati ulogu koja vas motivira da više idete u ovom smjeru.

U divljini postoji prilično nekoliko Python knjižnica za mrežnu obradu i analizu. Za programiranje na niskoj razini ključ je knjižnica soketa [2]. Biblioteke zasnovane na protokolima visoke razine su httplib, ftplib, imaplib i smtplib. Da bi se nadzirali mrežni priključci i konkurentni kandidati za tok paketa, koriste se python-nmap [3], dpkt [4] i PyShark [5]. Za praćenje i promjenu toka paketa široko se koristi skapy knjižnica [6].

U ovom ćemo članku pogledati knjižnicu PyShark i nadzirati koji paketi dolaze na određeno mrežno sučelje. Kao što ćete vidjeti u nastavku, rad s PySharkom je jednostavan. Dokumentacija na web mjestu projekta pomoći će vam u prvim koracima - s njom ćete vrlo brzo postići korisni rezultat. Međutim, što se tiče glatke, potrebno je više znanja.

PyShark može učiniti puno više nego što se čini na prvi pogled, a nažalost, u vrijeme pisanja ovog teksta, postojeća dokumentacija to ne pokriva u cijelosti. To ga nepotrebno otežava i pruža dobar razlog za dublje gledanje ispod poklopca motora.

O PySharku

PyShark [8] je Python omot za Tshark [10]. Jednostavno koristi svoju sposobnost izvoza XML podataka koristeći svoje raščlanjivanje. Sam Tshark verzija je naredbenog retka Wiresharka. I Tshark i PyShark ovise o knjižnici Pcap koja zapravo snima mrežne pakete i održava se pod okriljem Tcpdumpa [7]. Dan PyShark razvija i kontinuirano održava (na Twitteru koristi ime KimiNewt).

Kako bi se spriječila moguća zabuna, postoji sličan alat, Apache Spark [11], koji je objedinjeni analitički mehanizam za veliku obradu podataka. Naziv PySpark koristi se za Python sučelje s Apache Sparkom, o čemu ovdje ne raspravljamo.

Instaliranje PySharka

PyShark zahtijeva da se instaliraju i knjižnica Pcap i Tshark. Odgovarajući paketi za Debian GNU / Linux 10 i Ubuntu nazivaju se libpcap0.8 i tshark, a pomoću apt-get može se postaviti na sljedeći način:

Popis 1: Instaliranje Pcap biblioteke i Tshark

# pip3 instaliraj python-pyshark

Ako još nisu instalirani, moraju se dodati i Python3 i Pip. Odgovarajući paketi za Debian GNU / Linux 10 i Ubuntu nazivaju se python3 i python3-pip i mogu se instalirati na sljedeći način pomoću apt-get:

Popis 2: Instalirajte Python 3 i PIP za Python 3

# apt-get instalirati python3 python3-pip

Sada je vrijeme za dodavanje PySharka. Na temelju našeg istraživanja PyShark još nije upakiran ni za jednu veću distribuciju Linuxa. Instalacija se vrši pomoću programa za instaliranje paketa Python pip3 (pip za Python 3) kao sistemski paket kako slijedi:

Popis 3: Instalirajte PyShark pomoću PIP-a

# pip3 instaliraj python-pyshark

Sada je PyShark spreman za upotrebu u Python skriptama na vašem Linux sustavu. Imajte na umu da izvršavate donje skripte Python kao administrativni korisnik, na primjer, koristeći sudo, jer biblioteka Pcap ne dopušta da pakete tražite kao obični korisnik.

Sljedeća izjava dodaje sadržaj modula PyShark u prostor imena vaše Python skripte:

Popis 4: Uvoz PyShark modula

uvoz pyshark

Metode hvatanja paketa

PyShark dolazi s dva različita načina rada s kojima nudi prikupljanje paketa s promatranog mrežnog sučelja. Za kontinuirano prikupljanje koristite metodu LiveCapture (), a za spremanje u lokalnu datoteku metodu FileCapture () iz modula PyShark. Rezultat je popis paketa (objekt Python iterator) koji vam omogućuje da prođete kroz zarobljeni paket podataka po paketu. Popisi u nastavku pokazuju kako se koriste dvije metode.

Popis 5: Koristite PyShark za hvatanje s prvog Wifi sučelja wlan0

uvoz pyshark
hvatanje = pyshark.LiveCapture (sučelje = 'wlan0')

S prethodnim izjavama, snimljeni mrežni paketi čuvaju se u memoriji. Dostupna memorija može biti ograničena, no skladištenje snimljenih paketa u lokalnoj datoteci je alternativa. U upotrebi je format datoteke Pcap [9]. To vam omogućuje obradu i interpretaciju zarobljenih podataka pomoću drugih alata koji su također povezani s knjižnicom Pcap.

Popis 6: Koristite PyShark za spremanje zarobljenih paketa u lokalnu datoteku

uvoz pyshark
hvatanje = pyshark.FileCapture ('/ tmp / networkpackages.kapa ')

Pokrećući liste 5 i 6, još uvijek nećete dobiti izlaz. Sljedeći je korak sužavanje paketa koji će se preciznije prikupljati na temelju vaših željenih kriterija.

Odabir paketa

Prethodno predstavljeni objekt snimanja uspostavlja vezu sa željenim sučeljem. Dalje, dvije metode sniff () i sniff_continuously () objekta za hvatanje prikupljaju mrežne pakete. sniff () vraća se pozivatelju čim su prikupljeni svi traženi paketi. Suprotno tome, sniff_continuously () isporučuje jedan paket pozivatelju čim je prikupljen. To omogućuje prijenos mrežnog prometa uživo.

Nadalje, dvije metode omogućuju vam da odredite različita ograničenja i mehanizam filtriranja paketa, na primjer, broj paketa koji koriste parametar packet_count i razdoblje tijekom kojeg se paketi trebaju sakupljati pomoću vremenskog ograničenja parametra. Popis 7 pokazuje kako prikupiti 50 mrežnih paketa, samo kao prijenos uživo, koristeći metodu sniff_continuously ().

Popis 7: Prikupite 50 mrežnih paketa s wlan0

uvoz pyshark
hvatanje = pyshark.LiveCapture (sučelje = 'wlan0')
za paket u hvatanju.šmrcati_kontinuirano (broj paketa = 5):
ispis (paket)

Različiti detalji paketa vidljivi su pomoću ispisa izvoda (paketa) (vidi sliku 1).

Slika 1: sadržaj paketa

Na popisu 7 prikupili ste sve vrste mrežnih paketa bez obzira na protokol ili priključak usluge. PyShark omogućuje napredno filtriranje pomoću takozvanog BPF filtra [12]. Popis 8 pokazuje kako prikupiti 5 TCP paketa koji dolaze putem porta 80 i ispisati vrstu paketa. Podaci se pohranjuju u atributu paketa najviši_sloj.

Popis 8: Prikupljanje samo TCP paketa

uvoz pyshark
hvatanje = pyshark.LiveCapture (sučelje = 'wlan0', bpf_filter = 'tcp port 80')
uhvatiti.njuškati (broj paketa = 5)
ispis (snimanje)
za paket u hvatanju:
ispis (paket.najviši sloj)

Spremite popis 8 kao datoteku tcp-sniff.py i pokrenite Python skriptu. Izlaz je sljedeći:

Popis 9: Izlaz popisa 8

# python3 tcp-sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Raspakiranje snimljenih paketa

Snimljeni objekt radi kao ruska lutka Matroska - sloj po sloj, sadrži sadržaj odgovarajućeg mrežnog paketa. Raspakiranje je pomalo nalik Božiću - nikad ne znate koje ćete informacije pronaći unutra dok ih ne otvorite. Popis 10 prikazuje hvatanje 10 mrežnih paketa i otkrivanje vrste protokola, izvornog i odredišnog porta i adrese.

Popis 10: Prikaz izvora i odredišta zarobljenog paketa

uvoz pyshark
vrijeme uvoza
# definiraj sučelje
networkInterface = "enp0s3"
# definiraj objekt hvatanja
hvatanje = pyshark.LiveCapture (sučelje = networkInterface)
ispis ("slušanje na% s"% networkInterface)
za paket u hvatanju.neprekidno njuškati (broj paketa = 10):
# prilagođeni izlaz
probati:
# dobiti vremensku oznaku
localtime = vrijeme.asctime (vrijeme.lokalno vrijeme (vrijeme.vrijeme()))
# dobiti paketni sadržaj
protokol = paket.transportni sloj # vrsta protokola
src_addr = paket.ip.src # adresa izvora
src_port = paket [protokol].srcport # izvorni port
dst_addr = paket.ip.dst # odredišna adresa
dst_port = paket [protokol].dstport # odredišna luka
# informacije o izlaznom paketu
ispis ("% s IP% s:% s <-> % s:% s (% s) "% (lokalno vrijeme, src_addr, src_port, dst_addr, dst_port, protokol))
osim AttributeError kao e:
# zanemari pakete koji nisu TCP, UDP i IPv4
proći
ispis ("")

Skripta generira izlaz, kao što je prikazano na slici 2, jedan redak po primljenom paketu. Svaki redak započinje vremenskom oznakom, zatim izvorna IP adresa i priključak, zatim odredišna IP adresa i priključak i, na kraju, vrsta mrežnog protokola.


Slika 2: Izvor i odredište za zarobljene pakete

Zaključak

Izgradnja vlastitog mrežnog skenera nikada nije bila jednostavnija od toga. Temeljen na temeljima Wiresharka, PyShark vam nudi sveobuhvatan i stabilan okvir za nadgledanje mrežnih sučelja vašeg sustava na način na koji to zahtijevate.

Poveznice i reference

  • [1] Silver Moon: 18 naredbi za nadgledanje mrežne propusnosti na Linux poslužitelju, https: // www.binarni tidi.com / linux-naredbe-monitor-mreža /
  • [2] Python knjižnica utičnica, 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] skapi, https: // pypi.org / project / scapy /
  • [7] Tcpdump i libpcap, http: // www.tcpdump.org /
  • [8] PyShark, web stranica projekta, http: // kiminewt.github.io / pyshark /
  • [9] Format datoteke Libpcap, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wikis / Development / LibpcapFileFormat
  • [10] Tshark, https: // www.žičana oštrica.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // iskra.apache.org /
  • [12] BPF filtar, https: // wiki.žičana oštrica.org / CaptureFilters
HD Remastered igre za Linux koje ranije nisu imale Linux izdanje
Mnogi programeri i izdavači igara dolaze s HD remasterom starih igara kako bi produžili životni vijek franšize, molimo obožavatelje da zatraže kompati...
Kako koristiti AutoKey za automatizaciju Linux igara
AutoKey je uslužni program za automatizaciju radne površine za Linux i X11, programiran na Python 3, GTK i Qt. Koristeći njegovu skriptiranje i MACRO ...
Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...