Python

Oma võrgimonitori loomine PySharkiga

Oma võrgimonitori loomine PySharkiga

Olemasolevad tööriistad

Paljud võrguanalüüsi tööriistad on juba mõnda aega olemas olnud. Näiteks Linuxis on need nii Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack kui ka spidomeeter ja ettercap. Nende üksikasjaliku kirjelduse saamiseks võite vaadata Silver Kooni võrdlust [1].

Miks mitte kasutada olemasolevat tööriista ja kirjutada selle asemel oma? Minu arvates on TCP / IP-võrguprotokollide parem mõistmine, õigesti kodeerimise õppimine või ainult konkreetse funktsiooni rakendamine, mida vajate oma juhtumi jaoks, sest olemasolevad tööriistad ei anna teile seda, mida tegelikult vajate. Lisaks võivad teie rakenduse / süsteemi kiiruse ja koormuse täiustused mängida rolli, mis motiveerib teid selles suunas rohkem liikuma.

Looduses on võrgu töötlemiseks ja analüüsimiseks üsna palju Pythoni teeke. Madalal tasemel programmeerimiseks on võtmeks pesakogu [2]. Kõrgetasemelised protokollipõhised teegid on httplib, ftplib, imaplib ja smtplib. Võrguportide ja pakettvoo konkureerivate kandidaatide jälgimiseks kasutatakse Python-nmap [3], dpkt [4] ja PyShark [5]. Nii pakettide voo jälgimiseks kui ka muutmiseks on scapy teek [6] laialt kasutusel.

Selles artiklis heidame pilgu PySharki teeki ja jälgime, millised paketid jõuavad kindlasse võrguliidesesse. Nagu näete allpool, on PySharkiga töötamine lihtne. Projekti veebisaidil olev dokumentatsioon aitab teid esimeste sammude tegemisel - sellega saavutate kasutatava tulemuse väga kiiresti. Kuid kui tegemist on nipsakaga, on vaja rohkem teadmisi.

PyShark suudab palju rohkem, kui esmapilgul tundub, ja kahjuks ei hõlma olemasolev dokumentatsioon selle kirjutamise ajal seda täielikult. See muudab selle asjatult keeruliseks ja annab hea põhjuse kapoti alt sügavamale vaatamiseks.

PySharki kohta

PyShark [8] on Tsharki [10] Pythoni ümbris. See kasutab lihtsalt oma võimet XML-andmeid eksportida, kasutades parsimist. Tshark ise on Wiresharki käsurea versioon. Nii Tshark kui ka PyShark sõltuvad Pcki teegist, mis tegelikult võrgupakette hõivab ja mida hoitakse Tcpdumpi katte all [7]. PySharki töötab välja ja hooldab pidevalt Dan (ta kasutab Twitteris nime KimiNewt).

Võimalike segaduste vältimiseks on olemas sarnase kõlaga tööriist Apache Spark [11], mis on ühtne analüüsi mootor suuremahuliseks andmetöötluseks. Nime PySpark kasutatakse Apache Sparki Pythoni liidese jaoks, mida me siin ei aruta.

PySharki installimine

PyShark nõuab nii Pcki teegi kui ka Tsharki installimist. Debiani GNU / Linux 10 ja Ubuntu vastavad paketid kannavad nime libpcap0.8 ja tshark ning selle saab apt-get abil seadistada järgmiselt:

Nimekiri 1: Pcki teegi ja Tsharki installimine

# pip3 installige python-pyshark

Kui see pole veel installitud, tuleb lisada ka Python3 ja Pip. Debiani GNU / Linux 10 ja Ubuntu vastavad paketid kannavad nime python3 ja python3-pip ning neid saab apt-get abil installida järgmiselt:

Loend 2: installige Python 3 ja PIP Python 3 jaoks

# apt-get install python3 python3-pip

Nüüd on aeg lisada PyShark. Meie uuringute põhjal pole PySharki veel ühegi suurema Linuxi jaotuse jaoks pakendatud. Selle installimine toimub kogu süsteemi hõlmava paketina kasutades Pythoni paketi installijat pip3 (pip for Python 3):

Loend 3: installige PyShark PIP-i abil

# pip3 installige python-pyshark

Nüüd on PyShark teie Linuxi süsteemi Pythoni skriptides kasutamiseks valmis. Pange tähele, et käivitage allpool olevad Pythoni skriptid administraatori kasutajana, näiteks sudo abil, kuna Pcap'i teek ei võimalda teil pakette tavakasutajana otsida.

Järgmine lause lisab PySharki mooduli sisu Pythoni skripti nimeruumi:

Loend 4: importige moodul PyShark

import pyshark

Pakendite püüdmise meetodid

Pakendist välja tuleb PyShark koos kahe erineva režiimiga, millega pakutakse vaadeldava võrguliidese pakette. Pidevaks kogumiseks kasutage meetodit LiveCapture () ja kohalikku faili salvestamiseks kasutage PySharki mooduli FileCapture () meetodit. Tulemuseks on pakettide loend (Pythoni iteraatori objekt), mis võimaldab läbida hõivatud andmepaketid paketi kaupa. Allpool toodud loendid näitavad, kuidas neid kahte meetodit kasutada.

Loend 5: kasutage PySharki, et jäädvustada esimesest Wifi-liidesest wlan0

import pyshark
püüdmine = pyshark.LiveCapture (liides = 'wlan0')

Eelmiste väidetega hoitakse hõivatud võrgupakette mälus. Vaba mälu võib olla piiratud, kuid alternatiiviks on hõivatud pakettide salvestamine kohalikku faili. Kasutusel on faili Pcap vorming [9]. See võimaldab hõivatud andmeid töödelda ja tõlgendada muude tööriistadega, mis on seotud ka Pcap'i teegiga.

Loend 6: Püütud pakettide salvestamiseks kohalikku faili kasutage PySharki

import pyshark
püüdmine = pyshark.FileCapture ('/ tmp / võrgupaketid.kork ')

Käitades loendeid 5 ja 6, pole teil veel ühtegi väljundit. Järgmine samm on teie soovitud kriteeriumide alusel täpsemalt kogutavate pakettide kitsendamine.

Pakettide valimine

Varem kasutusele võetud püüdmisobjekt loob ühenduse soovitud liidesega. Järgmisena koguvad püüdmisobjekti kaks meetodit (ja) pidevalt () võrgupakette. sniff () naaseb helistajale kohe, kui kõik soovitud paketid on kogutud. Seevastu edastab sniff_continuously () helistajale ühe paketi kohe pärast selle kogumist. See võimaldab võrguliikluse otseülekannet.

Lisaks võimaldavad need kaks meetodit määrata pakettide erinevad piirangud ja filtreerimise mehhanismi, näiteks parameetrit packet_count kasutavate pakettide arvu ja perioodi, mille jooksul pakette tuleb koguda parameetri timeout abil. Loendis 7 on näidatud, kuidas koguda ainult 50 võrgupaketti otseülekandena, kasutades meetodit sniff_continuously ().

Nimekiri 7: koguge wlan0-st 50 võrgupaketti

import pyshark
püüdmine = pyshark.LiveCapture (liides = 'wlan0')
hõivatud pakettide jaoks.nuuskama_pidevalt (pakettide_arv = 5):
print (pakett)

Erinevad pakettide üksikasjad on nähtavad avalduse printimise (pakett) abil (vt joonis 1).

Joonis 1: pakendi sisu

Loendis 7 kogusite kõikvõimalikke võrgupakette, olenemata protokollist või teenusepordist. PyShark võimaldab teil teha täpsemat filtreerimist, kasutades nn BPF-filtrit [12]. Loendis 8 on näidatud, kuidas koguda 5 TCP-paketti, mis tulevad pordi 80 kaudu ja printivad pakettide tüübi. Teave on salvestatud paketi atribuudis kõrgeim_kiht.

Loend 8: ainult TCP-pakettide kogumine

import pyshark
püüdmine = pyshark.LiveCapture (liides = 'wlan0', bpf_filter = 'TCP port 80')
jäädvustama.nuuskama (paketi_arv = 5)
printima (jäädvustama)
hõivatud paketi jaoks:
print (pakett.kõrgeim_kiht)

Salvestage loend 8 failina tcp-sniff.py ja käivitage Pythoni skript. Väljund on järgmine:

Nimekiri 9: loendi 8 väljund

# python3 tcp-nuusutamine.py

TCP
TCP
TCP
OCSP
TCP
#

Püütud pakettide kasti tühistamine

Püütud objekt töötab vene Matroska nukuna - kiht kihi haaval, see sisaldab vastava võrgupaketi sisu. Kastist eemaldamine tundub natuke jõulude moodi - kunagi ei tea, millise teabe leiate seest, enne kui selle avasite. Loendis 10 demonstreeritakse 10 võrgupaketi hõivamist ja selle protokolli tüübi, nii lähte- kui ka sihtport ja aadress, avalikustamist.

Loend 10: pildistatud paketi allika ja sihtkoha kuvamine

import pyshark
impordiaeg
# define liides
networkInterface = "enp0s3"
# defineeri jäädvustamise objekti
püüdmine = pyshark.LiveCapture (liides = networkInterface)
print ("kuulamine% s"% networkInterface)
hõivatud pakettide jaoks.nuuskama_pidevalt (pakettide_arv = 10):
# kohandatud väljund
proovige:
# saada ajatempel
localtime = aeg.hetk (aeg.kohalik aeg (aeg.aeg ()))
# saada pakettide sisu
protokoll = pakett.transport_layer # protokolli tüüp
src_addr = pakett.ip.src # allika aadress
src_port = pakett [protokoll].srcport # allika port
dst_addr = pakett.ip.dst # sihtkoha aadress
dst_port = pakett [protokoll].dstport # sihtsadam
# väljundpakettide teave
print ("% s IP% s:% s <-> % s:% s (% s) "% (localtime, src_addr, src_port, dst_addr, dst_port, protokoll))
välja arvatud AttributeError kui e:
# ignoreerida muid pakette kui TCP, UDP ja IPv4
üle andma
print ("")

Skript genereerib väljundi, nagu on näidatud joonisel 2, ühe rea vastuvõetud paketi kohta. Iga rida algab ajatempliga, millele järgnevad allika IP-aadress ja port, seejärel sihtkoha IP-aadress ja port ning lõpuks võrguprotokolli tüüp.


Joonis 2: hõivatud pakettide allikas ja sihtkoht

Järeldus

Oma võrguskanneri loomine pole kunagi varem olnud sellest lihtsam. Wiresharki alustaladele tuginedes pakub PyShark teile terviklikku ja stabiilset raamistikku, et jälgida oma süsteemi võrguliideseid teie soovitud viisil.

Lingid ja viited

  • [1] Silver Moon: 18 käsku võrgu ribalaiuse jälgimiseks Linuxi serveris, https: // www.binaritsiidid.com / linux-commands-monitor-network /
  • [2] Pythoni sokli teek, https: // docs.püüton.org / 3 / teek / pesa.HTML
  • [3] python-nmap, https: // pypi.org / projekt / python3-nmap /
  • [4] dpkt, https: // pypi.org / projekt / dpkt /
  • [5] PyShark, https: // pypi.org / projekt / pyshark /
  • [6] scapy, https: // pypi.org / projekt / scapy /
  • [7] Tcpdump ja libpcap, http: // www.tcpdump.org /
  • [8] PyShark, projekti veebisait, http: // kiminewt.github.io / pyshark /
  • [9] Libpcapi failivorming, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wikid / Development / LibpcapFileFormat
  • [10] Tshark, https: // www.traadihai.org / docs / man-pages / tshark.HTML
  • [11] Apache Spark, https: // säde.apache.org /
  • [12] BPF-filter, https: // wiki.traadihai.org / CaptureFilters
HD Remastered Games Linuxile, millel pole kunagi varem Linuxi väljalaset olnud
Paljud mängude arendajad ja kirjastajad pakuvad frantsiisi eluea pikendamiseks välja vanade mängude HD-remasteri. Palun fännid, kes soovivad ühilduvus...
Kuidas kasutada AutoKeyt Linuxi mängude automatiseerimiseks
AutoKey on Linuxi ja X11 töölaua automatiseerimise utiliit, mis on programmeeritud Python 3, GTK ja Qt. Selle skriptimise ja MACRO funktsionaalsuse ab...
Kuidas näidata FPS-loendurit Linuxi mängudes
Linuxi mängimine sai suure tõuke, kui Valve teatas Steam-kliendi ja nende mängude Linuxi toest 2012. aastal. Sellest ajast peale on paljud AAA- ja ind...