Python

Byg din egen netværksmonitor med PyShark

Byg din egen netværksmonitor med PyShark

Eksisterende værktøjer

Mange værktøjer til netværksanalyse har eksisteret i nogen tid. Under Linux er disse for eksempel Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack samt speedometer og ettercap. For en detaljeret beskrivelse af dem kan du se på Silver Moon's sammenligning [1].

Så hvorfor ikke bruge et eksisterende værktøj og i stedet skrive dit eget? Årsager, jeg ser, er en bedre forståelse af TCP / IP-netværksprotokoller, at lære at kode korrekt eller implementere netop den specifikke funktion, du har brug for til din brugssag, fordi de eksisterende værktøjer ikke giver dig det, du rent faktisk har brug for. Desuden kan hastigheds- og belastningsforbedringer til din applikation / system også spille en rolle, der motiverer dig til at bevæge dig mere i denne retning.

I naturen findes der adskillige Python-biblioteker til netværksbehandling og analyse. Til programmering på lavt niveau er sokkelbiblioteket [2] nøglen. Protokolbaserede biblioteker på højt niveau er httplib, ftplib, imaplib og smtplib. For at overvåge netværksporte og konkurrencedygtige pakke-stream-kandidater anvendes python-nmap [3], dpkt [4] og PyShark [5]. Til både overvågning og ændring af pakkestrømmen er scapy-biblioteket [6] i vid udstrækning i brug.

I denne artikel vil vi se på PyShark-biblioteket og overvåge, hvilke pakker der kommer til en bestemt netværksgrænseflade. Som du vil se nedenfor er det ligetil at arbejde med PyShark. Dokumentationen på projektwebstedet hjælper dig med de første trin - med det opnår du et brugbart resultat meget hurtigt. Men når det kommer til nitty-gritty, er mere viden nødvendig.

PyShark kan gøre meget mere, end det ser ud ved første øjekast, og desværre dækker den eksisterende dokumentation på tidspunktet for denne skrivning ikke det fuldt ud. Dette gør det unødvendigt vanskeligt og giver en god grund til at se dybere ned under motorhjelmen.

Om PyShark

PyShark [8] er en Python-indpakning til Tshark [10]. Det bruger simpelthen sin evne til at eksportere XML-data ved hjælp af sin parsing. Tshark selv er kommandolinieversionen af ​​Wireshark. Både Tshark og PyShark afhænger af Pcap-biblioteket, der faktisk fanger netværkspakker og vedligeholdes under hætten af ​​Tcpdump [7]. PyShark er udviklet og vedligeholdes løbende af Dan (han bruger navnet KimiNewt på Twitter).

For at forhindre mulig forvirring findes der et lignende lydværktøj, Apache Spark [11], som er en samlet analysemotor til databehandling i stor skala. Navnet PySpark bruges til Python-grænsefladen til Apache Spark, som vi ikke diskuterer her.

Installation af PyShark

PyShark kræver, at både Pcap-biblioteket og Tshark er installeret. De tilsvarende pakker til Debian GNU / Linux 10 og Ubuntu hedder libpcap0.8 og tshark og kan konfigureres som følger ved hjælp af apt-get:

Liste 1: Installation af Pcap-biblioteket og Tshark

# pip3 installer python-pyshark

Hvis den ikke er installeret endnu, skal Python3 og Pip også tilføjes. De tilsvarende pakker til Debian GNU / Linux 10 og Ubuntu hedder python3 og python3-pip og kan installeres som følger ved hjælp af apt-get:

Liste 2: Installer Python 3 og PIP til Python 3

# apt-get install python3 python3-pip

Nu er det tid til at tilføje PyShark. Baseret på vores forskning er PyShark endnu ikke pakket til nogen større Linux-distribution. Installationen af ​​den udføres ved hjælp af Python-pakkeinstallationsprogrammet pip3 (pip for Python 3) som en systemdækkende pakke som følger:

Liste 3: Installer PyShark ved hjælp af PIP

# pip3 installer python-pyshark

Nu er PyShark klar til brug i Python-scripts på dit Linux-system. Bemærk, at du udfører Python-scripts nedenfor som en administrativ bruger, for eksempel ved hjælp af sudo, fordi Pcap-biblioteket ikke tillader dig at søge efter pakker som en almindelig bruger.

Den følgende erklæring tilføjer indholdet af PyShark-modulet til navneområdet for dit Python-script:

Liste 4: Importer PyShark-modulet

importer pyshark

Metoder til opsamling af pakker

Ud af kassen kommer PyShark med to forskellige tilstande, som den tilbyder at samle pakker fra den observerede netværksgrænseflade. For kontinuerlig indsamling skal du bruge LiveCapture () -metoden, og for at gemme i en lokal fil skal du bruge FileCapture () -metoden fra PyShark-modulet. Resultatet er en pakkeliste (Python iterator-objekt), der giver dig mulighed for at gennemgå den fangede datapakke efter pakke. Nedenstående oversigter viser, hvordan man bruger de to metoder.

Liste 5: Brug PyShark til at fange fra den første Wifi-grænseflade wlan0

importer pyshark
capture = pyshark.LiveCapture (interface = 'wlan0')

Med de tidligere udsagn opbevares de fangede netværkspakker i hukommelsen. Den tilgængelige hukommelse kan være begrænset, men lagring af de fangede pakker i en lokal fil er et alternativ. Pcap-filformatet er i brug [9]. Dette giver dig mulighed for at behandle og fortolke de fangede data af andre værktøjer, der også er knyttet til Pcap-biblioteket.

Liste 6: Brug PyShark til at gemme de fangede pakker i en lokal fil

importer pyshark
capture = pyshark.FileCapture ('/ tmp / netværkspakker.kasket')

Kører lister 5 og 6, vil du ikke have nogen output endnu. Det næste trin er at indsnævre pakkerne, der skal indsamles mere præcist baseret på dine ønskede kriterier.

Valg af pakker

Det tidligere introducerede capture-objekt opretter forbindelse til den ønskede grænseflade. Derefter samler de to metoder sniff () og sniff_continuously () af capture-objektet netværkspakkerne. sniff () vender tilbage til den, der ringer op, så snart alle de ønskede pakker er blevet samlet. I modsætning hertil leverer sniff_continuously () en enkelt pakke til den, der ringer op, så snart den blev samlet. Dette muliggør en live stream af netværkstrafikken.

Desuden giver de to metoder dig mulighed for at specificere forskellige begrænsninger og filtreringsmekanismer for pakker, for eksempel antallet af pakker, der bruger parameteren packet_count, og den periode, hvor pakkerne skal indsamles ved hjælp af parameter-timeout. Liste 7 viser, hvordan man kun indsamler 50 netværkspakker som en live stream ved hjælp af metoden sniff_continuously ().

Liste 7: Saml 50 netværkspakker fra wlan0

importer pyshark
capture = pyshark.LiveCapture (interface = 'wlan0')
til pakke i fangst.sniff_continuously (packet_count = 5):
print (pakke)

Forskellige pakkeoplysninger er synlige ved hjælp af udsagnstryk (pakke) (se figur 1).

Figur 1: pakkeindhold

I liste 7 indsamlede du alle slags netværkspakker, uanset hvilken protokol eller serviceport. PyShark giver dig mulighed for at foretage avanceret filtrering ved hjælp af det såkaldte BPF-filter [12]. Liste 8 viser, hvordan man samler 5 TCP-pakker, der kommer ind via port 80 og udskriver pakketypen. Oplysningerne er gemt i pakkeattributten højeste lag.

Liste 8: Kun indsamling af TCP-pakker

importer pyshark
capture = pyshark.LiveCapture (interface = 'wlan0', bpf_filter = 'TCP-port 80')
fange.snuse (packet_count = 5)
udskrive (fange)
til pakke i fangst:
print (pakke.højeste lag)

Gem liste 8, som filen tcp-sniff.py, og kør Python-scriptet. Outputtet er som følger:

Listing 9: Output fra Listing 8

# python3 tcp-sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Unboxing de fangede pakker

Det fangede objekt fungerer som en russisk Matroska dukke - lag for lag, den indeholder indholdet af den tilsvarende netværkspakke. Unboxing føles lidt som jul - du ved aldrig, hvilke oplysninger du finder indeni, før du åbnede den. Fortegnelse 10 viser, at man fanger 10 netværkspakker og afslører protokolletypen, både kilde og destinationsport og adresse.

Liste 10: Viser kilde og destination for den fangede pakke

importer pyshark
importtid
# definer interface
networkInterface = "enp0s3"
# definer capture-objekt
capture = pyshark.LiveCapture (interface = netværkInterface)
udskriv ("lytter på% s"% networkInterface)
til pakke i fangst.sniff_continuously (packet_count = 10):
# justeret output
prøve:
# få tidsstempel
localtime = tid.asctime (tid.localtime (tid.tid()))
# få pakkeindhold
protokol = pakke.transport_layer # protokol type
src_addr = pakke.ip.src # kildeadresse
src_port = pakke [protokol].srcport # kilde port
dst_addr = pakke.ip.dst # destinationsadresse
dst_port = pakke [protokol].dstport # destinationsport
# output pakkeinfo
udskriv ("% s IP% s:% s <-> % s:% s (% s) "% (localtime, src_addr, src_port, dst_addr, dst_port, protocol))
undtagen AttributeError som e:
# ignorere andre pakker end TCP, UDP og IPv4
passere
Print (" ")

Scriptet genererer en output, som vist i figur 2, en enkelt linje pr. Modtaget pakke. Hver linje starter med et tidsstempel efterfulgt af kildens IP-adresse og port, derefter destinations-IP-adressen og porten og endelig typen af ​​netværksprotokol.


Figur 2: Kilde og destination for fangede pakker

Konklusion

At bygge din egen netværksscanner har aldrig været nemmere end det. Baseret på fundamentet for Wireshark tilbyder PyShark dig en omfattende og stabil ramme til at overvåge netværksgrænsefladerne på dit system på den måde, du har brug for det.

Links og referencer

  • [1] Silver Moon: 18 kommandoer til overvågning af netværksbåndbredde på Linux-server, https: // www.binær tidevand.com / linux-kommandoer-monitor-netværk /
  • [2] Python-stikkontaktbibliotek, https: // docs.python.org / 3 / bibliotek / stikkontakt.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 og libpcap, http: // www.tcpdump.org /
  • [8] PyShark, projektwebsted, http: // kiminewt.github.io / pyshark /
  • [9] Libpcap-filformat, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wikis / Udvikling / LibpcapFileFormat
  • [10] Tshark, https: // www.wireshark.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // gnist.apache.org /
  • [12] BPF-filter, https: // wiki.wireshark.org / CaptureFilters
Mus Styr og administrer musebevægelse mellem flere skærme i Windows 10
Styr og administrer musebevægelse mellem flere skærme i Windows 10
Dual Display Mouse Manager lader dig kontrollere og konfigurere musebevægelse mellem flere skærme ved at bremse dens bevægelser nær grænsen. Windows 1...
Mus WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
WinMouse giver dig mulighed for at tilpasse og forbedre musemarkørens bevægelse på Windows-pc
Hvis du vil forbedre standardfunktionerne for din musemarkør, skal du bruge freeware WinMouse. Det tilføjer flere funktioner, der hjælper dig med at f...
Mus Museklik på venstre museknap fungerer ikke på Windows 10
Museklik på venstre museknap fungerer ikke på Windows 10
Hvis du bruger en dedikeret mus med din bærbare computer eller stationære computer, men musens venstre-klik-knap fungerer ikke på Windows 10/8/7 af en...