Python

Vytvorte si vlastný monitor siete s programom PyShark

Vytvorte si vlastný monitor siete s programom PyShark

Existujúce nástroje

Mnoho nástrojov na sieťovú analýzu existuje už nejaký čas. Pod Linuxom sú to napríklad Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack, ako aj rýchlomer a ettercap. Pre ich podrobný popis sa môžete pozrieť na porovnanie Silver Moon [1].

Prečo teda nepoužiť existujúci nástroj a namiesto toho napísať vlastný? Dôvody, ktoré vidím, sú lepšie pochopenie sieťových protokolov TCP / IP, naučenie sa správneho kódovania alebo implementácia iba konkrétnej funkcie, ktorú potrebujete pre svoj prípad použitia, pretože existujúce nástroje vám nedajú to, čo skutočne potrebujete. Zlepšenie rýchlosti a načítania vašej aplikácie / systému môže navyše hrať úlohu, ktorá vás motivuje k tomu, aby ste sa viac uberali týmto smerom.

Vo voľnej prírode existuje pomerne veľa knižníc Pythonu na sieťové spracovanie a analýzu. Pre programovanie na nízkej úrovni je kľúčom knižnica soketov [2]. Knižnice na vysokej úrovni založené na protokole sú httplib, ftplib, imaplib a smtplib. Na sledovanie sieťových portov a konkurenčných kandidátov na paketový prúd sa používajú python-nmap [3], dpkt [4] a PyShark [5]. Na sledovanie a zmenu toku paketov sa často používa scapy knižnica [6].

V tomto článku sa pozrieme na knižnicu PyShark a budeme sledovať, ktoré balíky prichádzajú na konkrétne sieťové rozhranie. Ako uvidíte ďalej, práca s programom PyShark je jednoduchá. Pri prvých krokoch vám pomôže dokumentácia na webovej stránke projektu - pomocou nej veľmi rýchlo dosiahnete použiteľný výsledok. Pokiaľ však ide o drsnú, sú potrebné ďalšie znalosti.

PyShark dokáže oveľa viac, ako sa na prvý pohľad zdá, a bohužiaľ, v čase písania tohto článku, to súčasná dokumentácia nepokrýva v plnom rozsahu. To zbytočne sťažuje a poskytuje dobrý dôvod pozrieť sa hlbšie pod kapotu.

O spoločnosti PyShark

PyShark [8] je obálka Pythonu pre Tshark [10]. Jednoducho využíva svoju schopnosť exportovať údaje XML pomocou svojej syntaktickej analýzy. Samotný Tshark je verzia programu Wireshark z príkazového riadku. Tshark aj PyShark závisia od knižnice Pcap, ktorá skutočne zachytáva sieťové balíčky a je udržiavaná pod kapotou Tcpdump [7]. PyShark vyvíja a neustále udržuje Dan (na Twitteri používa meno KimiNewt).

Aby sa zabránilo možnej nejasnosti, existuje podobne znejúci nástroj Apache Spark [11], ktorý je jednotným analytickým nástrojom na rozsiahle spracovanie údajov. Názov PySpark sa používa pre rozhranie Pythonu k Apache Spark, o ktorom tu nehovoríme.

Inštaluje sa program PyShark

PyShark vyžaduje inštaláciu knižnice Pcap aj Tshark. Zodpovedajúce balíky pre Debian GNU / Linux 10 a Ubuntu sú pomenované libpcap0.8 a tshark a dajú sa nastaviť nasledovne pomocou apt-get:

Výpis 1: Inštalácia knižnice Pcap a Tshark

# pip3 nainštalujte python-pyshark

Ak ešte nie sú nainštalované, je potrebné pridať aj Python3 a Pip. Zodpovedajúce balíky pre Debian GNU / Linux 10 a Ubuntu sú pomenované python3 a python3-pip a môžu byť nainštalované nasledovne pomocou apt-get:

Výpis 2: Nainštalujte Python 3 a PIP pre Python 3

# apt-get nainštalovať python3 python3-pip

Teraz je čas pridať PyShark. Na základe nášho výskumu nie je PyShark zatiaľ zabalený pre žiadnu významnú distribúciu Linuxu. Inštalácia sa vykonáva pomocou inštalačného programu balíka Python pip3 (pip pre Python 3) ako balíka pre celý systém, a to nasledovne:

Výpis 3: Nainštalujte PyShark pomocou PIP

# pip3 nainštalujte python-pyshark

Teraz je PyShark pripravený na použitie v skriptoch Pythonu vo vašom systéme Linux. Upozorňujeme, že nižšie uvedené skripty Python môžete spúšťať ako administratívny používateľ, napríklad pomocou sudo, pretože knižnica Pcap vám neumožňuje hľadať balíčky ako bežný používateľ.

Nasledujúce vyhlásenie pridáva obsah modulu PyShark do priestoru názvov vášho skriptu Python:

Výpis 4: Importujte modul PyShark

dovoz pyshark

Metódy získavania balíkov

Balík PyShark ponúka dva rôzne režimy, v ktorých ponúka zhromažďovanie paketov zo sledovaného sieťového rozhrania. Na nepretržité zhromažďovanie používajte metódu LiveCapture () a na ukladanie do lokálneho súboru metódu FileCapture () z modulu PyShark. Výsledkom je zoznam balíkov (objekt iterátora Pythonu), ktorý umožňuje prechádzať zachytené dátové balíky po balíkoch. Nižšie uvedený zoznam ukazuje, ako sa tieto dve metódy používajú.

Výpis 5: Použite PyShark na snímanie z prvého Wifi rozhrania wlan0

dovoz pyshark
zajať = pyshark.LiveCapture (rozhranie = 'wlan0')

S predchádzajúcimi príkazmi sú zachytené sieťové balíčky uložené v pamäti. Dostupná pamäť môže byť obmedzená, alternatívou je však ukladanie zachytených balíkov do lokálneho súboru. Používa sa formát súboru Pcap [9]. To vám umožní spracovať a interpretovať zachytené dáta pomocou ďalších nástrojov, ktoré sú tiež prepojené s knižnicou Pcap.

Výpis 6: Použite program PyShark na uloženie zachytených balíkov do lokálneho súboru

dovoz pyshark
zajať = pyshark.FileCapture ('/ tmp / networkpackages.čiapka ')

Pri spustení záznamov 5 a 6 nebudete mať zatiaľ žiadny výstup. Ďalším krokom je zúženie balíkov, ktoré sa majú zbierať, presnejšie na základe požadovaných kritérií.

Vyberajú sa pakety

Predtým zavedený objekt zachytenia vytvorí spojenie s požadovaným rozhraním. Ďalej dve metódy sniff () a sniff_continuously () objektu zachytávania zhromažďujú sieťové pakety. sniff () sa vráti volajúcemu, akonáhle sa zhromaždia všetky požadované pakety. Naproti tomu sniff_continuously () doručí volajúcemu jeden paket, akonáhle je zhromaždený. Toto umožňuje priamy prenos sieťovej prevádzky.

Ďalej vám tieto dve metódy umožňujú určiť rôzne obmedzenia a mechanizmy filtrovania balíkov, napríklad počet balíkov pomocou parametra packet_count a obdobie, počas ktorého sa majú balíčky zbierať pomocou parametra timeout. Zoznam 7 ukazuje, ako zhromaždiť 50 sieťových balíkov iba ako priamy prenos pomocou metódy sniff_continuously ().

Výpis 7: Zhromaždite 50 sieťových balíkov z wlan0

dovoz pyshark
zajať = pyshark.LiveCapture (rozhranie = 'wlan0')
pre zachytenie paketu.sniff_continuously (packet_count = 5):
tlač (paket)

Rôzne podrobnosti paketu sú viditeľné pomocou príkazu print (packet) (pozri obrázok 1).

Obrázok 1: obsah balenia

V zozname 7 ste zhromaždili všetky druhy sieťových paketov bez ohľadu na to, aký protokol alebo port služby. PyShark umožňuje pokročilé filtrovanie pomocou takzvaného BPF filtra [12]. Zoznam 8 ukazuje, ako zhromaždiť 5 balíkov TCP prichádzajúcich cez port 80 a tlačiť typ paketu. Informácie sú uložené v atribúte paketu nejvyšší_hráč.

Výpis 8: Iba zhromažďovanie balíkov TCP

dovoz pyshark
zajať = pyshark.LiveCapture (rozhranie = 'wlan0', bpf_filter = 'port tcp 80')
zajať.čuchať (packet_count = 5)
tlačiť (zachytiť)
pre zachytenie paketu:
tlač (paket.najvyššia_hra)

Uložte záznam 8 ako súbor tcp-sniff.py a spustite skript Python. Výstup je nasledovný:

Výpis 9: Výstup zo záznamu 8

# python3 tcp-sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Rozbaľovanie zachytených paketov

Zachytený objekt funguje ako ruská bábika Matroska - vrstva po vrstve, obsahuje obsah zodpovedajúceho sieťového paketu. Unboxing sa trochu podobá na Vianoce - až do otvorenia nikdy neviete, aké informácie nájdete vo vnútri. Zoznam 10 demonštruje zachytenie 10 sieťových paketov a odhalenie jeho typu protokolu, zdrojového aj cieľového portu a adresy.

Výpis 10: Zobrazuje sa zdroj a cieľ zachyteného paketu

dovoz pyshark
čas importu
# definovať rozhranie
networkInterface = "enp0s3"
# definovať zachytený objekt
zajať = pyshark.LiveCapture (rozhranie = networkInterface)
tlač ("počúvanie na% s"% networkInterface)
pre zachytenie paketu.sniff_continuously (packet_count = 10):
# upravený výstup
skúste:
# získať časovú pečiatku
miestny čas = čas.čas (čas.miestny čas (čas.čas ()))
# získať obsah paketu
protokol = paket.transport_layer # typ protokolu
src_addr = paket.ip.src # zdrojová adresa
src_port = paket [protokol].srcport # zdrojovy port
dst_addr = paket.ip.dst # cieľová adresa
dst_port = paket [protokol].dstport # cieľový port
# výstupné informácie o pakete
tlač ("% s IP% s:% s <-> % s:% s (% s) "% (miestny čas, src_addr, src_port, dst_addr, dst_port, protokol))
okrem AttributeError ako e:
# ignorovať iné pakety ako TCP, UDP a IPv4
prejsť
print ("")

Skript generuje výstup, ako je znázornené na obrázku 2, jeden riadok na prijatý paket. Každý riadok začína časovou značkou, za ktorou nasleduje zdrojová adresa IP a port, potom cieľová adresa IP a port a nakoniec typ sieťového protokolu.


Obrázok 2: Zdroj a cieľ zachytených balíkov

Záver

Vytvorenie vlastného sieťového skenera nebolo nikdy jednoduchšie ako to. Na základe základov spoločnosti Wireshark vám program PyShark ponúka komplexný a stabilný rámec na monitorovanie sieťových rozhraní vášho systému spôsobom, ktorý požadujete.

Odkazy a referencie

  • [1] Silver Moon: 18 príkazov na sledovanie šírky pásma siete na serveri Linux, https: // www.binárne prílivy.com / linux-commands-monitor-network /
  • [2] Knižnica soketov Python, https: // docs.pytón.org / 3 / knižnica / zásuvka.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 a libpcap, http: // www.tcpdump.org /
  • [8] PyShark, webová stránka projektu, http: // kiminewt.github.io / pyshark /
  • [9] Formát súboru Libpcap, Wireshark Wiki, https: // gitlab.com / WireShark / Wireshark / - / wiki / Development / LibpcapFileFormat
  • [10] Tshark, https: // www.wirehark.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // spark.apache.org /
  • [12] Filter BPF, https: // wiki.wirehark.org / CaptureFilters
Hry Ako zvýšiť rýchlosť FPS v systéme Linux?
Ako zvýšiť rýchlosť FPS v systéme Linux?
FPS znamená Počet snímok za sekundu. Úlohou FPS je merať snímkovú frekvenciu pri prehrávaní videa alebo herných výkonoch. Jednoducho povedané, počet n...
Hry Najlepšie hry Oculus App Lab
Najlepšie hry Oculus App Lab
Ak ste vlastníkom náhlavnej súpravy Oculus, musíte byť informovaní o bočnom nakladaní. Sideloading je proces inštalácie neuloženého obsahu do náhlavne...
Hry Top 10 hier, ktoré sa dajú hrať na Ubuntu
Top 10 hier, ktoré sa dajú hrať na Ubuntu
Platforma Windows je jednou z dominujúcich platforiem pre hry kvôli obrovskému percentu hier, ktoré sa dnes vyvíjajú na natívnu podporu systému Window...