Python

Izdelava lastnega omrežnega monitorja s PySharkom

Izdelava lastnega omrežnega monitorja s PySharkom

Obstoječa orodja

Veliko orodij za mrežno analizo obstaja že kar nekaj časa. Pod Linuxom so to na primer Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack ter merilnik hitrosti in ettercap. Za njihov podroben opis si lahko ogledate primerjavo Silver Moon [1].

Zakaj torej ne bi uporabili obstoječega orodja in namesto njega napisali svojega? Razlogi, ki jih vidim, so boljše razumevanje omrežnih protokolov TCP / IP, učenje pravilnega kodiranja ali izvajanje samo posebne funkcije, ki jo potrebujete za primer uporabe, saj vam obstoječa orodja ne dajo tistega, kar dejansko potrebujete. Poleg tega lahko izboljšave hitrosti in obremenitve vaše aplikacije / sistema igrajo tudi vlogo, ki vas spodbuja, da se bolj premikate v tej smeri.

V naravi obstaja kar nekaj Pythonovih knjižnic za omrežno obdelavo in analizo. Za programiranje na nizki ravni je ključna knjižnica vtičnic [2]. Knjižnice na visoki ravni, ki temeljijo na protokolih, so httplib, ftplib, imaplib in smtplib. Za spremljanje omrežnih vrat in konkurenčnih kandidatov za paketni tok se uporabljajo python-nmap [3], dpkt [4] in PyShark [5]. Za spremljanje in spreminjanje paketnega toka je široko uporabljena knjižnica scapy [6].

V tem članku si bomo ogledali knjižnico PyShark in spremljali, kateri paketi prispejo v določen omrežni vmesnik. Kot boste videli spodaj, je delo s PySharkom enostavno. Dokumentacija na spletni strani projekta vam bo pomagala pri prvih korakih - z njo boste zelo hitro dosegli uporaben rezultat. Ko pa gre za drobno, je potrebno več znanja.

PyShark lahko naredi veliko več, kot se zdi na prvi pogled, in na žalost v času pisanja tega obstoječa dokumentacija tega ne pokriva v celoti. To po nepotrebnem otežuje in daje dober razlog, da se globlje zazremo pod pokrov motorja.

O PySharku

PyShark [8] je Pythonov ovoj za Tshark [10]. Preprosto uporablja sposobnost izvoza podatkov XML s pomočjo razčlenjevanja. Tshark je sama različica ukazne vrstice Wireshark. Tako Tshark kot PyShark sta odvisna od knjižnice Pcap, ki dejansko zajema omrežne pakete in se vzdržuje pod pokrovom Tcpdump [7]. PyShark razvija in neprestano vzdržuje Dan (na Twitterju uporablja ime KimiNewt).

Da bi preprečili morebitno zmedo, obstaja podobno orodje Apache Spark [11], ki je enoten analitični mehanizem za obsežno obdelavo podatkov. Ime PySpark se uporablja za vmesnik Python za Apache Spark, o čemer tukaj ne razpravljamo.

Namestitev PyShark

PyShark zahteva namestitev knjižnice Pcap in Tshark. Ustrezni paketi za Debian GNU / Linux 10 in Ubuntu se imenujejo libpcap0.8 in tshark in ga lahko nastavite na naslednji način s pomočjo apt-get:

Seznam 1: Namestitev knjižnice Pcap in Tshark

# pip3 namestite python-pyshark

Če še nista nameščena, je treba dodati še Python3 in Pip. Ustrezni paketi za Debian GNU / Linux 10 in Ubuntu se imenujejo python3 in python3-pip in jih je mogoče namestiti na naslednji način s pomočjo apt-get:

Seznam 2: Namestite Python 3 in PIP za Python 3

# apt-get namestite python3 python3-pip

Zdaj je čas, da dodamo PyShark. Na podlagi naših raziskav PyShark še ni pripravljen za večje distribucije Linuxa. Namestitev se izvede z namestitvenim programom paketa Python pip3 (pip za Python 3) kot sistemski paket, kot sledi:

Seznam 3: Namestite PyShark s pomočjo PIP

# pip3 namestite python-pyshark

Zdaj je PyShark pripravljen za uporabo v skriptih Python v vašem sistemu Linux. Prosimo, upoštevajte, da spodaj izvajate skripte Python kot skrbniški uporabnik, na primer z uporabo sudo, ker knjižnica Pcap ne omogoča iskanja paketov kot običajni uporabnik.

Naslednja izjava doda vsebino modula PyShark v imenski prostor vašega skripta Python:

Seznam 4: Uvozite modul PyShark

uvoz pyshark

Metode zajemanja paketov

PyShark ima na voljo dva različna načina, s katerimi ponuja zbiranje paketov iz opazovanega omrežnega vmesnika. Za neprekinjeno zbiranje uporabite metodo LiveCapture (), za shranjevanje v lokalno datoteko pa metodo FileCapture () iz modula PyShark. Rezultat je seznam paketov (objekt iteratorja Python), ki omogoča prehod po zajetem podatkovnem paketu po paketu. Spodnji seznami prikazujejo, kako uporabljati obe metodi.

Seznam 5: Uporabite PyShark za zajem iz prvega vmesnika Wifi wlan0

uvoz pyshark
zajem = pyshark.LiveCapture (vmesnik = 'wlan0')

S prejšnjimi stavki se zajeti omrežni paketi shranijo v pomnilnik. Razpoložljivi pomnilnik je morda omejen, vendar je shranjevanje zajetih paketov v lokalni datoteki druga možnost. V uporabi je oblika datoteke Pcap [9]. To vam omogoča obdelavo in interpretacijo zajetih podatkov z drugimi orodji, ki so povezana tudi s knjižnico Pcap.

Seznam 6: Uporabite PyShark za shranjevanje zajetih paketov v lokalno datoteko

uvoz pyshark
zajem = pyshark.FileCapture ('/ tmp / networkpackages.cap ')

Med izvajanjem seznamov 5 in 6 še ne boste imeli nobenega rezultata. Naslednji korak je zožiti pakete, ki jih je treba natančneje zbirati na podlagi želenih meril.

Izbira paketov

Prej predstavljeni objekt zajemanja vzpostavi povezavo z želenim vmesnikom. Nato dve metodi sniff () in sniff_continuously () objekta zajemanja zbirata omrežne pakete. sniff () se vrne klicatelju takoj, ko so zbrani vsi zahtevani paketi. Nasprotno pa sniff_continuously () dostavi en paket paketu klicatelju takoj, ko je bil prevzet. To omogoča prenos omrežnega prometa v živo.

Poleg tega ti dve metodi omogočata določitev različnih omejitev in mehanizma filtriranja paketov, na primer število paketov, ki uporabljajo parameter packet_count, in obdobje, v katerem naj se paketi zbirajo s pomočjo časovne omejitve parametra. Seznam 7 prikazuje, kako zbrati 50 omrežnih paketov samo kot prenos v živo z uporabo metode sniff_continuously ().

Seznam 7: Zberite 50 omrežnih paketov iz wlan0

uvoz pyshark
zajem = pyshark.LiveCapture (vmesnik = 'wlan0')
za paket v zajemu.vohanje neprekinjeno (število paketov = 5):
tiskanje (paket)

Z izpisom stavka (paket) so vidne različne podrobnosti o paketu (glej sliko 1).

Slika 1: vsebina paketa

Na seznamu 7 ste zbrali vse vrste omrežnih paketov, ne glede na protokol ali vrata storitve. PyShark vam omogoča napredno filtriranje z uporabo tako imenovanega BPF filtra [12]. Seznam 8 prikazuje, kako zbrati 5 paketov TCP, ki prihajajo prek vrat 80 in natisniti vrsto paketa. Informacije so shranjene v paketnem atributu najvišji_plast.

Seznam 8: Zbiranje samo paketov TCP

uvoz pyshark
zajem = pyshark.LiveCapture (vmesnik = 'wlan0', bpf_filter = 'tcp port 80')
zajemanje.vohanje (število paketov = 5)
tiskanje (zajem)
za paket v zajemu:
tiskanje (paket.najvišja_plast)

Shranite seznam 8 kot datoteko tcp-sniff.py in zaženite skript Python. Rezultat je naslednji:

Seznam 9: Izhod iz seznama 8

# python3 tcp-sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Razpakiranje zajetih paketov

Ujeti predmet deluje kot ruska lutka Matroska - plast za plastjo, vsebuje vsebino ustreznega omrežnega paketa. Razpakiranje je nekoliko podobno božiču - nikoli ne veš, katere informacije najdeš v sebi, dokler jih ne odpreš. Seznam 10 prikazuje zajem 10 omrežnih paketov in razkrivanje vrste protokola, tako izvornih kot ciljnih vrat in naslova.

Seznam 10: Prikaz vira in cilja zajetega paketa

uvoz pyshark
čas uvoza
# definiraj vmesnik
networkInterface = "enp0s3"
# definirajte objekt zajemanja
zajem = pyshark.LiveCapture (vmesnik = networkInterface)
print ("poslušanje na% s"% networkInterface)
za paket v zajemu.nenehno sniff_count_count = 10):
# prilagojen izhod
poskusite:
# dobite časovni žig
localtime = čas.asctime (čas.lokalni čas (čas.čas ()))
# dobite paketno vsebino
protokol = paket.vrsta protokola transport_layer #
src_addr = paket.ip.src # izvorni naslov
src_port = paket [protokol].srcport # izvorna vrata
dst_addr = paket.ip.dst # ciljni naslov
dst_port = paket [protokol].dstport # ciljna vrata
# informacije o izhodnem paketu
print ("% s IP% s:% s <-> % s:% s (% s) "% (lokalni čas, src_addr, src_port, dst_addr, dst_port, protokol))
razen AttributeError kot e:
# prezre pakete, ki niso TCP, UDP in IPv4
podajo
natisni ("")

Skript ustvari izhod, kot je prikazano na sliki 2, eno vrstico na prejeti paket. Vsaka vrstica se začne s časovnim žigom, čemur sledi izvorni naslov IP in vrata, nato ciljni naslov IP in vrata ter nazadnje vrsta omrežnega protokola.


Slika 2: Vir in cilj zajetih paketov

Zaključek

Izdelava lastnega omrežnega skenerja še nikoli ni bila tako enostavna. Na podlagi temeljev Wiresharka vam PyShark ponuja celovit in stabilen okvir za spremljanje omrežnih vmesnikov vašega sistema na način, kot ga potrebujete.

Povezave in reference

  • [1] Silver Moon: 18 ukazov za nadzor pasovne širine omrežja na strežniku Linux, https: // www.binarni tidi.com / linux-command-monitor-network /
  • [2] Knjižnica vtičnic Python, https: // docs.python.org / 3 / knjižnica / vtičnica.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 / project / scapy /
  • [7] Tcpdump in libpcap, http: // www.tcpdump.org /
  • [8] PyShark, spletno mesto projekta, http: // kiminewt.github.io / pyshark /
  • [9] Oblika datoteke Libpcap, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wikis / Development / LibpcapFileFormat
  • [10] Tshark, https: // www.žica.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // iskra.apache.org /
  • [12] BPF filter, https: // wiki.žica.org / CaptureFilters
Namestite najnovejšo strategijo igre OpenRA v Ubuntu Linux
OpenRA je Libre / Free Real Time strateški stroj, ki poustvarja zgodnje igre Westwood, kot je klasična Command & Conquer: Red Alert. Porazdeljeni modi...
Namestite najnovejši Dolphin Emulator za Gamecube & Wii v Linux
Dolphin Emulator vam omogoča igranje izbranih iger Gamecube in Wii na osebnih računalnikih Linux (PC). Dolphin Emulator je prosto dostopen in odprtok...
Kako uporabljati GameConqueror Cheat Engine v Linuxu
Članek zajema vodnik o uporabi varalnice GameConqueror v Linuxu. Številni uporabniki, ki igrajo igre v sistemu Windows, pogosto uporabljajo aplikacijo...