„Python“

Sukurkite savo tinklo monitorių naudodami „PyShark“

Sukurkite savo tinklo monitorių naudodami „PyShark“

Esami įrankiai

Daugelis tinklo analizės įrankių egzistuoja jau gana seniai. Pavyzdžiui, naudojant „Linux“, tai yra „Wireshark“, „tcpdump“, „nload“, „iftop“, „iptraf“, „nethogs“, „bmon“, „tcptrack“, taip pat spidometras ir „ettercap“. Norėdami gauti išsamų jų aprašymą, galite pažvelgti į „Silver Moon“ palyginimą [1].

Taigi, kodėl gi ne naudoti esamą įrankį, o vietoj to parašyti savo? Priežastys, kurias matau, yra geresnis TCP / IP tinklo protokolų supratimas, mokymasis tinkamai koduoti arba tik konkrečios funkcijos, reikalingos jūsų naudojimo atvejui, nes esami įrankiai nesuteikia to, ko jums iš tikrųjų reikia. Be to, jūsų programos / sistemos greičio ir apkrovos patobulinimai taip pat gali atlikti tam tikrą vaidmenį, kuris motyvuoja jus daugiau judėti šia kryptimi.

Gamtoje yra gana daug „Python“ bibliotekų, skirtų tinklui apdoroti ir analizuoti. Žemo lygio programavimui raktas yra lizdo biblioteka [2]. Aukšto lygio protokolinės bibliotekos yra httplib, ftplib, imaplib ir smtplib. Norint stebėti tinklo prievadus ir paketinių srautų konkurencingus kandidatus, naudojami python-nmap [3], dpkt [4] ir PyShark [5]. Tiek stebint, tiek pakeičiant paketų srautą, plačiai naudojama scapy biblioteka [6].

Šiame straipsnyje mes pažvelgsime į „PyShark“ biblioteką ir stebėsime, kurie paketai pasiekia konkrečią tinklo sąsają. Kaip pamatysite žemiau, dirbti su „PyShark“ yra nesudėtinga. Projekto svetainėje pateikiama dokumentacija padės jums atlikti pirmuosius žingsnius - ja labai greitai pasieksite naudingą rezultatą. Tačiau kalbant apie smulkmenas, reikia daugiau žinių.

„PyShark“ gali padaryti daug daugiau, nei atrodo iš pirmo žvilgsnio, ir, deja, šio rašymo metu esama dokumentacija to visiškai neapima. Tai be reikalo apsunkina ir yra rimta priežastis pažvelgti giliau po variklio dangčiu.

Apie „PyShark“

PyShark [8] yra „Python“ paketas, skirtas „Tshark“ [10]. Jis tiesiog naudoja savo sugebėjimą eksportuoti XML duomenis naudodamas savo analizavimą. Pati „Tshark“ yra „Wireshark“ komandinės eilutės versija. Tiek „Tshark“, tiek „PyShark“ priklauso nuo „Pcap“ bibliotekos, kuri iš tikrųjų fiksuoja tinklo paketus ir yra prižiūrima po „Tcpdump“ gaubtu [7]. „PyShark“ kuria ir nuolat prižiūri Danas (jis „Twitter“ naudoja vardą „KimiNewt“).

Siekiant išvengti galimos painiavos, egzistuoja panašaus skambesio įrankis „Apache Spark“ [11], kuris yra vieningas didelės apimties duomenų apdorojimo analizės variklis. „PySpark“ pavadinimas naudojamas „Apache Spark“ „Python“ sąsajai, kurios mes čia neaptariame.

„PyShark“ diegimas

„PyShark“ reikia įdiegti „Pcap“ biblioteką ir „Tshark“. Atitinkami „Debian GNU / Linux 10“ ir „Ubuntu“ paketai pavadinti libpcap0.8 ir „tshark“ ir juos galima nustatyti taip naudojant apt-get:

1 sąrašas: „Pcap“ bibliotekos ir „Tshark“ diegimas

# pip3 įdiekite python-pyshark

Jei dar neįdiegta, taip pat reikia pridėti „Python3“ ir „Pip“. Atitinkami „Debian GNU / Linux 10“ ir „Ubuntu“ paketai yra pavadinti python3 ir python3-pip ir juos galima įdiegti taip, naudojant apt-get:

2 sąrašas: įdiekite „Python 3“ ir „Python 3“ PIP

# apt-get install python3 python3-pip

Dabar atėjo laikas pridėti PyShark. Remiantis mūsų tyrimais, „PyShark“ dar nėra pakuota jokiam didesniam „Linux“ platinimui. Diegimas atliekamas naudojant „Python“ paketų diegimo programą pip3 („Python 3“ pyp) kaip visos sistemos paketą taip:

3 sąrašas: įdiekite „PyShark“ naudodami PIP

# pip3 įdiekite python-pyshark

Dabar „PyShark“ yra paruoštas naudoti „Python“ scenarijuose jūsų „Linux“ sistemoje. Atkreipkite dėmesį, kad žemiau pateiktus „Python“ scenarijus norite atlikti kaip administravimo vartotoją, pavyzdžiui, naudodami sudo, nes „Pcap“ biblioteka neleidžia ieškoti paketų kaip įprastas vartotojas.

Šis sakinys prideda „PyShark“ modulio turinį prie jūsų „Python“ scenarijaus vardų srities:

4 sąrašas: importuokite „PyShark“ modulį

importuoti pysharką

Pakuočių fiksavimo metodai

Iš dėžutės „PyShark“ yra du skirtingi režimai, kuriais ji siūlo rinkti paketus iš stebimos tinklo sąsajos. Jei norite nuolat rinkti, naudokite „LiveCapture“ () metodą, o jei norite įrašyti į vietinį failą, naudokite „FileCapture“) metodą iš „PyShark“ modulio. Rezultatas yra paketų sąrašas („Python iterator“ objektas), leidžiantis pereiti užfiksuotų duomenų paketą po paketą. Žemiau pateiktuose sąrašuose parodyta, kaip naudoti du metodus.

5 sąrašas: naudokite „PyShark“, kad užfiksuotumėte iš pirmosios „Wifi“ sąsajos „wlan0“

importuoti pysharką
gaudyti = pyshark.„LiveCapture“ (sąsaja = 'wlan0')

Su ankstesniais teiginiais, užfiksuoti tinklo paketai laikomi atmintyje. Turima atmintis gali būti ribota, tačiau užfiksuotų paketų saugojimas vietiniame faile yra alternatyva. Naudojamas „Pcap“ failo formatas [9]. Tai leidžia apdoroti ir interpretuoti užfiksuotus duomenis kitais įrankiais, kurie taip pat yra susieti su „Pcap“ biblioteka.

6 sąrašas: naudokite „PyShark“, kad užfiksuotus paketus išsaugotumėte vietiniame faile

importuoti pysharką
gaudyti = pyshark.„FileCapture“ ('/ tmp / tinklo paketai.dangtelis ')

Vykdydami 5 ir 6 sąrašus, dar neturėsite išvesties. Kitas žingsnis yra susiaurinti surinktinas pakuotes tiksliau, atsižvelgiant į jūsų norimus kriterijus.

Paketų pasirinkimas

Anksčiau pateiktas fiksavimo objektas užmezga ryšį su norima sąsaja. Tada du metodai užfiksuoja () ir „sniff_continuously“ () užfiksavimo objektą renka tinklo paketus. „sniff“) grįžta skambinančiajam, kai tik bus surinkti visi prašomi paketai. Priešingai, „sniff_continuously“) skambintojui pateikia vieną paketą, kai tik jis yra surinktas. Tai leidžia tiesiogiai transliuoti tinklo srautą.

Be to, šie du metodai leidžia nurodyti įvairius apribojimus ir paketų filtravimo mechanizmus, pavyzdžiui, paketų skaičių naudojant parametrą packet_count ir laikotarpį, per kurį paketai turi būti renkami naudojant parametro timeout. 7 sąraše parodyta, kaip surinkti tik 50 tinklo paketų kaip tiesioginį srautą, naudojant metodą sniff_continuously ().

7 sąrašas: Surinkite 50 tinklo paketų iš „wlan0“

importuoti pysharką
gaudyti = pyshark.„LiveCapture“ (sąsaja = 'wlan0')
užfiksuojamam paketui.sniff_continuously (paketo_skaičius = 5):
spausdinti (paketas)

Naudojant ataskaitos spausdinimą (paketą) matoma įvairi paketo informacija (žr. 1 pav.).

1 paveikslas: pakuotės turinys

Pateikdami 7 sąrašą, jūs rinkote visų rūšių tinklo paketus, nesvarbu, koks protokolas ar paslaugų prievadas. „PyShark“ leidžia atlikti išplėstinį filtravimą naudojant vadinamąjį BPF filtrą [12]. 8 sąrašas parodo, kaip surinkti 5 TCP paketus, gaunamus per 80 prievadą ir atsispausdinant paketų tipą. Informacija saugoma paketo atribute didžiausias_sluoksnis.

8 sąrašas: tik TCP paketų rinkimas

importuoti pysharką
gaudyti = pyshark.„LiveCapture“ (sąsaja = 'wlan0', bpf_filter = 'TCP prievadas 80')
užfiksuoti.uostyti (packet_count = 5)
spausdinti (užfiksuoti)
užfiksuotam paketui:
spausdinti (paketas.didžiausias_sluoksnis)

Išsaugokite 8 sąrašą kaip failą tcp-sniff.py ir paleiskite „Python“ scenarijų. Rezultatas yra toks:

9 sąrašas: 8 sąrašo rezultatas

# python3 tcp-sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Išpakuoti užfiksuotus paketus

Užfiksuotas objektas veikia kaip rusiška „Matroska“ lėlė - sluoksnis po sluoksnio, jame yra atitinkamo tinklo paketo turinys. Išpakavus dėžutę jaučiasi šiek tiek Kalėdos - niekada negali žinoti, kokią informaciją randi viduje, kol jos neatidarai. 10 sąrašas parodo, kaip užfiksuoti 10 tinklo paketų ir atskleisti jo protokolo tipą, tiek šaltinio, tiek paskirties prievadą ir adresą.

10 sąrašas: rodomas užfiksuoto paketo šaltinis ir paskirtis

importuoti pysharką
importo laikas
# define sąsaja
networkInterface = "enp0s3"
# apibrėžti fiksavimo objektą
gaudyti = pyshark.„LiveCapture“ (sąsaja = tinklo sąsaja)
spausdinti („klausau% s“% networkInterface)
užfiksuojamam paketui.sniff_continuously (paketo_skaičius = 10):
# pakoreguota išvestis
bandyti:
# gauti laiko žymę
localtime = laikas.laikas (laikas.vietos laikas (laikas.laikas()))
# gauti paketinį turinį
protokolas = paketas.transport_layer # protokolo tipas
src_addr = paketas.ip.src # šaltinio adresas
src_port = paketas [protokolas].srcport # šaltinio prievadas
dst_addr = paketas.ip.dst # paskirties adresas
dst_port = paketas [protokolas].dstport # paskirties uostas
# išvesties paketo informacija
spausdinti ("% s IP% s:% s <-> % s:% s (% s) "% (vietos laikas, src_addr, src_port, dst_addr, dst_port, protokolas))
išskyrus „AttributeError as e“:
# ignoruoti paketus, išskyrus TCP, UDP ir IPv4
praeiti
spausdinti ("")

Scenarijus sukuria išvestį, kaip parodyta 2 paveiksle, vieną eilutę kiekvienam gautam paketui. Kiekviena eilutė prasideda laiko žyme, po kurios nurodomas šaltinio IP adresas ir prievadas, paskirties IP adresas ir prievadas bei galiausiai tinklo protokolo tipas.


2 paveikslas: užfiksuotų paketų šaltinis ir paskirties vieta

Išvada

Sukurti savo tinklo skaitytuvą dar niekada nebuvo taip paprasta. Remdamasis „Wireshark“ pagrindais, „PyShark“ siūlo jums išsamią ir stabilią sistemą, kad galėtumėte stebėti savo sistemos tinklo sąsajas taip, kaip jums to reikia.

Nuorodos ir nuorodos

  • [1] „Silver Moon“: 18 komandų tinklo pralaidumui stebėti „Linux“ serveryje, https: // www.binarididai.„com“ / „Linux-commands-monitor-network“ /
  • [2] „Python“ lizdo biblioteka, https: // docs.pitonas.org / 3 / biblioteka / lizdas.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“ ir „libpcap“, http: // www.tcpdump.org /
  • [8] „PyShark“, projekto svetainė, http: // kiminewt.github.io / pyshark /
  • [9] „Libpcap“ failo formatas, „Wireshark“ „Wiki“, https: // gitlab.com / wireshark / wireshark / - / wikis / Development / LibpcapFileFormat
  • [10] „Tshark“, https: // www.laidinis ryklys.org / docs / man-pages / tshark.HTML
  • [11] „Apache Spark“, https: // kibirkštis.apache.org /
  • [12] BPF filtras, https: // wiki.laidinis ryklys.org / „CaptureFilters“
Kaip naudoti „Xdotool“, norint paskatinti pelės paspaudimus ir klavišų paspaudimus sistemoje „Linux“
„Xdotool“ yra nemokamas ir atviro kodo komandinės eilutės įrankis, skirtas pelės paspaudimams ir klavišų paspaudimams imituoti. Šis straipsnis apims t...
5 populiariausi „Linux“ skirtų ergonomiškų kompiuterinių pelių produktai
Ar ilgalaikis kompiuterio naudojimas sukelia riešo ar pirštų skausmą?? Ar jūs kenčiate nuo sąnarių standumo ir nuolat turite paspausti rankas? Ar jauč...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...