Python

Rakenna oma verkkomonitori PySharkin avulla

Rakenna oma verkkomonitori PySharkin avulla

Olemassa olevat työkalut

Monet verkkoanalyysityökalut ovat olleet olemassa jo jonkin aikaa. Esimerkiksi Linuxissa nämä ovat Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack sekä nopeusmittari ja ettercap. Yksityiskohtainen kuvaus niistä saatat katsoa Silver Moonin vertailusta [1].

Joten, miksi et käytä olemassa olevaa työkalua ja kirjoita oma, sen sijaan? Syyt näen ymmärtävän paremmin TCP / IP-verkkoprotokollia, oppimaan koodaamaan oikein tai toteuttamaan vain käyttötapauksessasi tarvitsemasi ominaisuuden, koska nykyiset työkalut eivät anna sinulle mitä tarvitset. Lisäksi sovelluksen / järjestelmän nopeuden ja kuormituksen parantamisella voi olla merkitys, joka motivoi sinua liikkumaan enemmän tähän suuntaan.

Luonnossa on melko monia Python-kirjastoja verkon käsittelyä ja analysointia varten. Matalan tason ohjelmoinnissa pistorasiakirjasto [2] on avain. Korkean tason protokollapohjaiset kirjastot ovat httplib, ftplib, imaplib ja smtplib. Verkkoporttien ja pakettivirran kilpailevien ehdokkaiden tarkkailuun käytetään python-nmap [3], dpkt [4] ja PyShark [5]. Sekä pakettivirran seurannassa että vaihtamisessa scapy-kirjasto [6] on laajalti käytössä.

Tässä artikkelissa tarkastelemme PyShark-kirjastoa ja seuraamme, mitkä paketit saapuvat tietylle verkkoliitännälle. Kuten näet alla, työskentely PySharkin kanssa on yksinkertaista. Projektisivuston dokumentaatio auttaa sinua ensimmäisissä vaiheissa - sen avulla saavutat käyttökelpoisen tuloksen hyvin nopeasti. Pikkuhiutaleiden osalta tarvitaan kuitenkin lisää tietoa.

PyShark voi tehdä paljon enemmän kuin miltä ensi silmäyksellä vaikuttaa, ja valitettavasti tämän kirjoituksen aikana olemassa oleva dokumentaatio ei kata sitä kokonaan. Tämä tekee siitä tarpeettoman vaikeaa ja tarjoaa hyvän syyn katsoa syvemmälle konepellin alle.

Tietoja PySharkista

PyShark [8] on Python-kääre Tsharkille [10]. Se käyttää yksinkertaisesti kykyään viedä XML-tietoja jäsentämällä. Tshark itsessään on Wiresharkin komentoriviversio. Sekä Tshark että PyShark riippuvat Pcap-kirjastosta, joka todella sieppaa verkkopaketit ja jota ylläpidetään Tcpdumpin suojan alla [7]. PySharkia kehittää ja ylläpitää jatkuvasti Dan (hän ​​käyttää Twitterissä nimeä KimiNewt).

Mahdollisten sekaannusten estämiseksi on olemassa samanlainen kuulostava työkalu Apache Spark [11], joka on yhtenäinen analyysimoottori laajamittaiseen tietojenkäsittelyyn. Nimeä PySpark käytetään Apache Sparkin Python-käyttöliittymässä, jota emme käsittele täällä.

PySharkin asentaminen

PyShark vaatii sekä Pcap-kirjaston että Tsharkin asennuksen. Debian GNU / Linux 10: n ja Ubuntun vastaavien pakettien nimi on libpcap0.8 ja tshark, ja se voidaan määrittää seuraavasti apt-get-sovelluksella:

Listaus 1: Pcap-kirjaston ja Tsharkin asentaminen

# pip3 asenna python-pyshark

Jos sitä ei ole vielä asennettu, myös Python3 ja Pip on lisättävä. Debian GNU / Linux 10: n ja Ubuntun vastaavien pakettien nimet ovat python3 ja python3-pip, ja ne voidaan asentaa seuraavasti apt-get: n avulla:

Listaus 2: Asenna Python 3 ja PIP Python 3: lle

# apt-get install python3 python3-pip

Nyt on aika lisätä PyShark. Tutkimuksemme perusteella PySharkia ei ole vielä pakattu mihinkään suurempaan Linux-jakeluun. Sen asennus tapahtuu Python-paketin asennusohjelmalla pip3 (pip for Python 3) koko järjestelmän kattavana pakettina seuraavasti:

Listaus 3: Asenna PyShark PIP: n avulla

# pip3 asenna python-pyshark

Nyt PyShark on käyttövalmis Linux-järjestelmän Python-komentosarjoissa. Huomaa, että suoritat alla olevat Python-komentosarjat järjestelmänvalvojana, esimerkiksi sudo-sovelluksella, koska Pcap-kirjasto ei salli sinun etsiä paketteja tavallisena käyttäjänä.

Seuraava lause lisää PyShark-moduulin sisällön Python-komentosarjan nimitilaan:

Listaus 4: Tuo PyShark-moduuli

tuoda pysharkia

Pakettien sieppauksen menetelmät

PySharkissa on alusta alkaen kaksi erilaista tilaa, joiden avulla se voi kerätä paketteja havaitulta verkkoliitännältä. Jatkuvaan keräämiseen käytä LiveCapture () -menetelmää, ja paikalliseen tiedostoon tallentamiseen käytä PyShark-moduulin FileCapture () -menetelmää. Tuloksena on pakettiluettelo (Python iterator -objekti), jonka avulla voit käydä kaapatun datapaketin läpi pakettikohtaisesti. Alla olevat luettelot osoittavat, kuinka näitä kahta menetelmää käytetään.

Listaus 5: PySharkilla voit kaapata ensimmäisestä Wifi-liitännästä wlan0

tuoda pysharkia
kaapata = pyshark.LiveCapture (käyttöliittymä = 'wlan0')

Aikaisempien lausekkeiden avulla kaapatut verkkopaketit pidetään muistissa. Käytettävissä oleva muisti saattaa olla rajoitettu, mutta siepattujen pakettien tallentaminen paikalliseen tiedostoon on vaihtoehto. Käytössä on Pcap-tiedostomuoto [9]. Tämän avulla voit käsitellä ja tulkita siepattuja tietoja muilla Pcap-kirjastoon linkitetyillä työkaluilla.

Listaus 6: PySharkin avulla voit tallentaa siepatut paketit paikalliseen tiedostoon

tuoda pysharkia
kaapata = pyshark.FileCapture ('/ tmp / verkkopaketit.korkki')

Jos suoritat luetteloita 5 ja 6, sinulla ei ole vielä mitään lähtöä. Seuraava vaihe on rajata kerättävät paketit tarkemmin haluamiesi kriteerien perusteella.

Pakettien valitseminen

Aikaisemmin esitetty sieppausobjekti muodostaa yhteyden haluttuun rajapintaan. Seuraavaksi kaksi menetelmää sieppaavat () ja jatkuvasti () sieppaavat objektit keräävät verkkopaketit. sniff () palaa soittajalle heti, kun kaikki pyydetyt paketit on kerätty. Sen sijaan sniff_continuously () toimittaa yhden paketin soittajalle heti, kun se on kerätty. Tämä sallii suoratoiston verkkoliikenteestä.

Lisäksi näiden kahden menetelmän avulla voit määrittää erilaisia ​​rajoituksia ja pakettien suodatusmekanismeja, esimerkiksi parametria packet_count käyttävien pakettien määrän ja ajanjakson, jonka aikana paketit on kerättävä parametrin aikakatkaisun avulla. Listaus 7 osoittaa, kuinka kerätään vain 50 verkkopakettia suorana lähetyksenä menetelmällä sniff_continuously ().

Listaus 7: Kerää 50 verkkopakettia wlan0: lta

tuoda pysharkia
kaapata = pyshark.LiveCapture (käyttöliittymä = 'wlan0')
siepattua pakettia varten.haistaa jatkuvasti (pakettien_määrä = 5):
tulosta (paketti)

Erilaiset pakettien yksityiskohdat ovat näkyvissä lausekepainatuksella (paketti) (katso kuva 1).

Kuva 1: paketin sisältö

Luettelossa 7 keräsit kaikenlaisia ​​verkkopaketteja protokollasta tai palveluportista riippumatta. PySharkin avulla voit tehdä edistyneen suodatuksen käyttämällä ns. BPF-suodatinta [12]. Listaus 8 osoittaa, kuinka kerätään 5 TCP-pakettia, jotka tulevat portin 80 kautta ja tulostavat pakettityypin. Tiedot tallennetaan pakettiattribuuttiin korkein_kerros.

Listaus 8: Vain TCP-pakettien kerääminen

tuoda pysharkia
kaapata = pyshark.LiveCapture (käyttöliittymä = 'wlan0', bpf_filter = 'TCP-portti 80')
kaapata.haistaa (packet_count = 5)
tulosta (sieppaa)
siepatulle paketille:
tulosta (paketti.korkein_kerros)

Tallenna luettelo 8 tiedostona tcp-sniff.py ja aja Python-komentosarja. Tuotos on seuraava:

Listaus 9: Listauksen 8 tulos

# python3 tcp-haistaa.py

TCP
TCP
TCP
OCSP
TCP
#

Siepattujen pakettien poistaminen pakkauksesta

Siepattu esine toimii venäläisenä Matroska-nukena - kerrokselta kerrokselle, se sisältää vastaavan verkkopaketin sisällön. Pakkauksen purkaminen tuntuu vähän joululta - et koskaan tiedä mitä tietoja löydät sisältä, ennen kuin avasit sen. Listaus 10 osoittaa 10 verkkopaketin sieppaamisen ja sen protokollatyypin, sekä lähde- että kohdeportin ja osoitteen, paljastamisen.

Listaus 10: Näytetään siepatun paketin lähde ja kohde

tuoda pysharkia
tuontiaika
# define käyttöliittymä
networkInterface = "enp0s3"
# määritä sieppausobjekti
kaapata = pyshark.LiveCapture (käyttöliittymä = networkInterface)
tulosta ("kuuntelee% s"% networkInterface)
siepattua pakettia varten.haistaa jatkuvasti (pakettien_määrä = 10):
# säädetty lähtö
yrittää:
# hae aikaleima
localtime = aika.ajankohta (aika.paikallisaika (aika.aika()))
# hanki pakettisisältö
protokolla = paketti.transport_layer # -protokollan tyyppi
src_addr = paketti.ip.src # lähdeosoite
src_port = paketti [protokolla].srcport # lähdeportti
dst_addr = paketti.ip.dst # kohdeosoite
dst_port = paketti [protokolla].dstport # kohdesatama
# lähtöpakettitiedot
tulosta ("% s IP% s:% s <-> % s:% s (% s) "% (paikannusaika, src_addr, src_port, dst_addr, dst_port, protokolla))
paitsi AttributeError as e:
# ohittaa muut paketit kuin TCP, UDP ja IPv4
kulkea
Tulosta (" ")

Komentosarja tuottaa lähdön, kuten kuvassa 2 on esitetty, yhden rivin vastaanotettua pakettia kohti. Jokainen rivi alkaa aikaleimalla, jota seuraavat lähteen IP-osoite ja portti, sitten kohde-IP-osoite ja portti ja lopuksi verkkoprotokollan tyyppi.


Kuva 2: Siepattujen pakettien lähde ja kohde

Johtopäätös

Oman verkkoskannerin rakentaminen ei ole koskaan ollut näin helppoa. Wiresharkin perustan perusteella PyShark tarjoaa sinulle kattavan ja vakaan kehyksen järjestelmän verkkoliitäntöjen seuraamiseksi tarvitsemallasi tavalla.

Linkit ja viitteet

  • [1] Silver Moon: 18 komentoa verkon kaistanleveyden seuraamiseen Linux-palvelimella, https: // www.binarytidit.com / linux-commands-monitor-network /
  • [2] Python-socket-kirjasto, https: // docs.python.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] scapy, https: // pypi.org / project / scapy /
  • [7] Tcpdump ja libpcap, http: // www.tcpdump.org /
  • [8] PyShark, projektin verkkosivusto, http: // kiminewt.github.io / pyshark /
  • [9] Libpcap-tiedostomuoto, Wireshark Wiki, https: // gitlab.fi / wireshark / wireshark / - / wikit / Kehitys / LibpcapFileFormat
  • [10] Tshark, https: // www.lankahai.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // kipinä.apache.org /
  • [12] BPF-suodatin, https: // wiki.lankahai.org / CaptureFilters
AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...
Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...
How to change Left & Right mouse buttons on Windows 10 PC
It's quite a norm that all computer mouse devices are ergonomically designed for right-handed users. But there are mouse devices available which are s...