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-pysharkJos 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-pipNyt 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-pysharkNyt 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 pysharkiaPakettien 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 pysharkiakaapata = 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 pysharkiakaapata = 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 pysharkiakaapata = 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 pysharkiakaapata = 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.pyTCP
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 pysharkiatuontiaika
# 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