Python

Veidojiet savu tīkla monitoru, izmantojot PyShark

Veidojiet savu tīkla monitoru, izmantojot PyShark

Esošie rīki

Daudzi tīkla analīzes rīki pastāv jau ilgu laiku. Piemēram, operētājsistēmā Linux tie ir Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack, kā arī spidometrs un ettercap. Lai iegūtu detalizētu to aprakstu, varat ielūkoties Silver Moon salīdzinājumā [1].

Tātad, kāpēc neizmantot esošu rīku un tā vietā uzrakstīt savu? Iemesli, ko es redzu, ir labāka TCP / IP tīkla protokolu izpratne, pareiza kodēšanas iemācīšanās vai tikai īpašās funkcijas ieviešana, kas nepieciešama jūsu lietošanas gadījumam, jo ​​esošie rīki nesniedz jums to, kas jums patiesībā ir nepieciešams. Turklāt jūsu lietojumprogrammas / sistēmas ātruma un slodzes uzlabojumiem var būt arī loma, kas motivē jūs vairāk virzīties šajā virzienā.

Savvaļā tīkla apstrādei un analīzei pastāv diezgan daudzas Python bibliotēkas. Zema līmeņa programmēšanai galvenais ir ligzdu bibliotēka [2]. Augsta līmeņa uz protokoliem balstītas bibliotēkas ir httplib, ftplib, imaplib un smtplib. Lai uzraudzītu tīkla porti un pakešu plūsmas konkurējošos kandidātus, tiek izmantoti python-nmap [3], dpkt [4] un PyShark [5]. Gan pakešu straumes uzraudzībai, gan mainīšanai plaši tiek izmantota scapy bibliotēka [6].

Šajā rakstā mēs apskatīsim PyShark bibliotēku un uzraudzīsim, kuras paketes nonāk noteiktā tīkla saskarnē. Kā jūs redzēsiet tālāk, darbs ar PyShark ir vienkāršs. Dokumentācija projekta vietnē palīdzēs jums pirmajos soļos - ar to jūs ļoti ātri sasniegsiet izmantojamu rezultātu. Tomēr, runājot par sīkumiem, ir nepieciešamas vairāk zināšanu.

PyShark var paveikt daudz vairāk, nekā šķiet no pirmā acu uzmetiena, un diemžēl šī rakstīšanas laikā esošā dokumentācija to pilnībā neaptver. Tas padara to nevajadzīgi sarežģītu un ir labs iemesls, lai ielūkotos dziļāk zem motora pārsega.

Par PyShark

PyShark [8] ir Python iesaiņotājs Tshark [10]. Tas vienkārši izmanto spēju eksportēt XML datus, izmantojot parsēšanu. Pati Tshark ir Wireshark komandrindas versija. Gan Tshark, gan PyShark ir atkarīgi no Pcap bibliotēkas, kas faktiski uztver tīkla paketes un tiek uzturēta zem Tcpdump pārsega [7]. PyShark ir izstrādājis un nepārtraukti uztur Dan (viņš čivināt izmanto vārdu KimiNewt).

Lai novērstu iespējamo neskaidrību, pastāv līdzīgi skanošs rīks Apache Spark [11], kas ir vienots analīzes dzinējs liela mēroga datu apstrādei. Nosaukums PySpark tiek izmantots Apache Spark Python saskarnei, kuru mēs šeit neapspriežam.

PyShark instalēšana

PyShark nepieciešama gan Pcap bibliotēkas, gan Tshark instalēšana. Debian GNU / Linux 10 un Ubuntu atbilstošās paketes tiek sauktas par libpcap0.8 un tshark, un to var iestatīt šādi, izmantojot apt-get:

1. saraksts: Pcap bibliotēkas un Tshark instalēšana

# pip3 instalējiet python-pyshark

Ja tas vēl nav instalēts, jāpievieno arī Python3 un Pip. Atbilstošās Debian GNU / Linux 10 un Ubuntu paketes tiek sauktas par python3 un python3-pip, un tās var instalēt šādi, izmantojot apt-get:

2. saraksts: instalējiet Python 3 un PIP Python 3

# apt-get instalēt python3 python3-pip

Tagad ir pienācis laiks pievienot PyShark. Pamatojoties uz mūsu pētījumu, PyShark vēl nav iesaiņots nevienam nozīmīgam Linux izplatījumam. To instalē, izmantojot Python pakotņu instalēšanas programmu pip3 (pip for Python 3) kā visas sistēmas pakotni šādi:

3. saraksts: instalējiet PyShark, izmantojot PIP

# pip3 instalējiet python-pyshark

Tagad PyShark ir gatavs lietošanai jūsu Linux sistēmas Python skriptos. Lūdzu, ņemiet vērā, ka izpildiet zemāk esošos Python skriptus kā administratīvo lietotāju, piemēram, izmantojot sudo, jo Pcap bibliotēka neļauj meklēt paketes kā parastu lietotāju.

Šis paziņojums pievieno PyShark moduļa saturu jūsu Python skripta nosaukumvietai:

4. saraksts: importējiet PyShark moduli

importa pyshark

Iepakojumu uztveršanas metodes

No kastes PyShark nāk ar diviem dažādiem režīmiem, ar kuriem tā piedāvā apkopot paketes no novērotā tīkla interfeisa. Nepārtrauktai kolekcijai izmantojiet metodi LiveCapture (), un, lai saglabātu lokālā failā, izmantojiet metodi FileSapture () no PyShark moduļa. Rezultāts ir pakotņu saraksts (objekts Python iterator), kas ļauj iziet cauri uzņemto datu pakotnei pa pakotnei. Tālāk esošajos sarakstos parādīts, kā izmantot abas metodes.

5. saraksts: izmantojiet PyShark, lai tvertu no pirmā Wifi interfeisa wlan0

importa pyshark
sagūstīt = pyshark.LiveCapture (interfeiss = 'wlan0')

Izmantojot iepriekšējos paziņojumus, tvertās tīkla paketes tiek saglabātas atmiņā. Pieejamā atmiņa var būt ierobežota, tomēr notverto pakotņu saglabāšana vietējā failā ir alternatīva. Tiek izmantots Pcap faila formāts [9]. Tas ļauj apstrādāt un interpretēt uzņemtos datus ar citiem rīkiem, kas ir saistīti arī ar Pcap bibliotēku.

6. saraksts: Izmantojiet PyShark, lai sagūstītos paketes saglabātu vietējā failā

importa pyshark
sagūstīt = pyshark.FileCapture ('/ tmp / tīkla paketes.vāciņš ')

Palaižot 5. un 6. sarakstu, jums vēl nebūs nevienas izejas. Nākamais solis ir precīzāk savākamo paku sašaurināšana, pamatojoties uz jūsu vēlamajiem kritērijiem.

Pakešu izvēle

Iepriekš ieviestais uztveršanas objekts izveido savienojumu ar vēlamo saskarni. Pēc tam abas metodes uztveršanas objekta sniff () un sniff_continuously () apkopo tīkla paketes. sniff () atgriežas pie zvanītāja, tiklīdz visas pieprasītās paketes ir savāktas. Turpretī sniff_continuously () piegādā zvanītājam vienu paketi, tiklīdz tā ir savākta. Tas ļauj tiešraidē straumēt tīkla trafiku.

Turklāt abas metodes ļauj norādīt dažādus ierobežojumus un pakešu filtrēšanas mehānismu, piemēram, paku skaitu, izmantojot parametru packet_count, un periodu, kurā paketes jāapkopo, izmantojot parametra taimauts. 7. saraksts parāda, kā savākt tikai 50 tīkla paketes kā tiešraidi, izmantojot metodi sniff_continuously ().

7. saraksts: savāciet 50 tīkla paketes no wlan0

importa pyshark
sagūstīt = pyshark.LiveCapture (interfeiss = 'wlan0')
uztveramajam pakešam.sniff_continuously (pakešu_skaits = 5):
izdrukāt (pakešu)

Izmantojot paziņojuma izdruku (pakešu), ir redzami dažādi pakešu dati (skat. 1. attēlu).

1. attēls: iepakojuma saturs

7. sarakstā jūs savācāt visu veidu tīkla paketes neatkarīgi no protokola vai pakalpojumu porta. PyShark ļauj veikt uzlabotu filtrēšanu, izmantojot tā dēvēto BPF filtru [12]. 8. saraksts parāda, kā savākt 5 TCP paketes, kas ienāk caur 80. portu un izdrukā pakešu tipu. Informācija tiek saglabāta pakešu atribūtā augstākais_slānis.

8. saraksts: tikai TCP pakotņu apkopošana

importa pyshark
sagūstīt = pyshark.LiveCapture (interfeiss = 'wlan0', bpf_filter = 'TCP ports 80')
sagūstīt.šņaukāties (pakešu_skaits = 5)
izdrukāt (uzņemt)
uztveramajam pakešam:
izdrukāt (pakešu.augstākais_slānis)

Saglabājiet 8. ierakstu kā failu tcp-sniff.py un palaidiet Python skriptu. Rezultāts ir šāds:

9. saraksts: 8. saraksta rezultāts

# python3 tcp-sniff.py

TCP
TCP
TCP
OCSP
TCP
#

Notverto pakešu izņemšana no kastes

Tvertais objekts slānis pa slānim darbojas kā krievu Matroska lelle, tajā ir atbilstošās tīkla paketes saturs. Unboxing jūtas mazliet kā Ziemassvētki - nekad nevar zināt, kādu informāciju atrodat iekšā, līdz to neatverat. 10 saraksts parāda 10 tīkla pakešu tveršanu un tā protokola veida atklāšanu - gan avota, gan mērķa portu un adresi.

10. saraksts: tiek parādīts tvertnes paketes avots un galamērķis

importa pyshark
importa laiks
# definēt saskarni
networkInterface = "enp0s3"
# definēt uztveršanas objektu
sagūstīt = pyshark.LiveCapture (interfeiss = networkInterface)
drukāt ("klausīšanās uz% s"% networkInterface)
uztveramajam pakešam.sniff_continuously (pakešu_skaits = 10):
# pielāgota izeja
mēģiniet:
# iegūt laika zīmogu
localtime = laiks.laiks (laiks.vietējais laiks (laiks.laiks()))
# iegūt pakešu saturu
protokols = pakete.transport_layer # protokola tips
src_addr = pakete.ip.src # avota adrese
src_port = pakete [protokols].srcport # avota ports
dst_addr = pakete.ip.dst # galamērķa adrese
dst_port = pakete [protokols].dstport # galamērķa osta
# izvades pakešu informācija
drukāt ("% s IP% s:% s <-> % s:% s (% s) "% (localtime, src_addr, src_port, dst_addr, dst_port, protokols))
izņemot AttributeError kā e:
# ignorēt citas paketes, izņemot TCP, UDP un IPv4
iziet
drukāt ("")

Skripts ģenerē izvadi, kā parādīts 2. attēlā, vienā rindā uz katru saņemto paketi. Katra rinda sākas ar laika zīmogu, kam seko avota IP adrese un ports, pēc tam galamērķa IP adrese un ports un, visbeidzot, tīkla protokola tips.


2. attēls. Uzņemto paku avots un galamērķis

Secinājums

Veidot savu tīkla skeneri nekad nav bijis tik vienkārši. Pamatojoties uz Wireshark pamatiem, PyShark piedāvā jums visaptverošu un stabilu sistēmu, lai uzraudzītu jūsu sistēmas tīkla saskarnes tā, kā jums nepieciešams.

Saites un atsauces

  • [1] Sudraba mēness: 18 komandas, lai uzraudzītu tīkla joslas platumu Linux serverī, https: // www.binaritīdi.com / linux-commands-monitor-network /
  • [2] Python ligzdu bibliotēka, https: // docs.pitons.org / 3 / library / socket.html
  • [3] pitons-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 un libpcap, http: // www.tcpdump.org /
  • [8] PyShark, projekta vietne, http: // kiminewt.github.io / pyshark /
  • [9] Libpcap faila formāts, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wikis / Development / LibpcapFileFormat
  • [10] Tshark, https: // www.vadu haizivs.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // dzirkstele.apache.org /
  • [12] BPF filtrs, https: // wiki.vadu haizivs.org / CaptureFilters
Izmantojot X-Mouse Button Control, atšķirīgi mainiet peles pogas atšķirīgai programmatūrai
Varbūt jums ir nepieciešams rīks, kas varētu mainīt peles vadību ar katru lietoto lietojumprogrammu. Ja tas tā ir, varat izmēģināt lietojumprogrammu a...
Microsoft Sculpt Touch bezvadu peles apskats
Es nesen lasīju par Microsoft Sculpt Touch bezvadu pele un nolēma to nopirkt. Pēc kāda laika izmantošanas es nolēmu dalīties savā pieredzē ar to. Šo b...
AppyMouse ekrāna skārienpaliktnis un peles rādītājs Windows planšetdatoriem
Planšetdatoru lietotājiem bieži pietrūkst peles rādītāja, it īpaši, ja viņi parasti lieto klēpjdatorus. Skārienekrāna viedtālruņiem un planšetdatoriem...