Piton

Saját hálózati monitor létrehozása a PyShark segítségével

Saját hálózati monitor létrehozása a PyShark segítségével

Meglévő eszközök

A hálózati elemzéshez számos eszköz létezik már jó ideje. Például Linux alatt ezek a Wireshark, tcpdump, nload, iftop, iptraf, nethogs, bmon, tcptrack, valamint sebességmérő és ettercap. Részletes leírásukért nézd meg Silver Moon összehasonlítását [1].

Tehát miért nem használ egy meglévő eszközt, és inkább megírja a sajátját? Az okok szerintem jobban megértik a TCP / IP hálózati protokollokat, megtanulják, hogyan kell megfelelően kódolni, vagy csak a saját használatához szükséges sajátosságot valósítják meg, mert a meglévő eszközök nem adják meg azt, amire valójában szüksége van. Ezenkívül az alkalmazás / rendszer sebességének és terhelésének fejlesztése is szerepet játszhat, amely arra ösztönöz, hogy többet lépjen ebben az irányban.

A vadonban elég sok Python-könyvtár létezik a hálózati feldolgozáshoz és elemzéshez. Alacsony szintű programozáshoz a socket könyvtár [2] a kulcs. A magas szintű protokoll alapú könyvtárak a httplib, az ftplib, az imaplib és az smtplib. A hálózati portok és a csomagfolyamok versenyképes jelöltjeinek megfigyeléséhez a Python-nmap [3], a dpkt [4] és a PyShark [5] elemeket használják. A csomagfolyam figyelése és megváltoztatása érdekében a scapy könyvtárat [6] széles körben használják.

Ebben a cikkben megnézzük a PyShark könyvtárat, és figyeljük, hogy mely csomagok érkeznek egy adott hálózati interfészhez. Amint alább láthatja, a PySharkkal való együttműködés egyszerű. A projekt honlapján található dokumentáció segít az első lépésekben - ezzel nagyon gyorsan elérheti a használható eredményt. Ami viszont a szemcsés-szemcsésséget illeti, több ismeretre van szükség.

A PyShark sokkal többet képes megtenni, mint amilyennek első látásra tűnik, és sajnos az írás idején a meglévő dokumentáció nem fedi le ezt teljes egészében. Ez feleslegesen megnehezíti, és jó okot ad arra, hogy mélyebben belenézzünk a motorháztető alá.

A PySharkról

A PyShark [8] egy Python csomagoló a Tshark számára [10]. Az XML adatok exportálásának képességét egyszerűen elemzésével használja. Maga a Tshark a Wireshark parancssori változata. A Tshark és a PyShark egyaránt függ a Pcap könyvtáraktól, amely ténylegesen rögzíti a hálózati csomagokat, és amelyet a Tcpdump fedélzetén tartanak fenn [7]. A PySharkot Dan fejleszti és folyamatosan karbantartja (a KimiNewt nevet használja a Twitteren).

Az esetleges zavarok elkerülése érdekében létezik egy hasonló hangzású eszköz, az Apache Spark [11], amely egységes elemző motor a nagyszabású adatfeldolgozáshoz. A PySpark nevet az Apache Spark Python felületéhez használják, amelyet itt nem tárgyalunk.

A PyShark telepítése

A PySharknak a Pcap könyvtár és a Tshark telepítésére is szükség van. A Debian GNU / Linux 10 és az Ubuntu megfelelő csomagjainak neve libpcap0.8 és a tshark, és az alábbiak szerint állítható be az apt-get használatával:

1. lista: A Pcap könyvtár és a Tshark telepítése

# pip3 telepítse a python-pysharkot

Ha még nincs telepítve, akkor hozzá kell adni a Python3-at és a Pip-et is. A Debian GNU / Linux 10 és az Ubuntu megfelelő csomagjainak neve python3 és python3-pip, és az alábbiak szerint telepíthetők az apt-get használatával:

2. lista: Telepítse a Python 3-at és a PIP-et a Python 3-hoz

# apt-get install python3 python3-pip

Itt az ideje hozzáadni a PySharkot. Kutatásunk alapján a PyShark még nincs csomagolva egyetlen nagyobb Linux disztribúcióhoz sem. Telepítése a Python csomagtelepítővel (pip3 a Python 3-hoz), egész rendszerre kiterjedő csomagként, az alábbiak szerint:

3. lista: Telepítse a PySharkot a PIP használatával

# pip3 telepítse a python-pysharkot

A PyShark készen áll a Linux rendszer Python szkriptjeiben való használatra. Felhívjuk figyelmét, hogy az alábbi Python szkripteket adminisztrátori felhasználóként hajtsa végre, például sudo használatával, mert a Pcap könyvtár nem engedélyezi, hogy csomagokat keressen rendes felhasználóként.

Az alábbi utasítás hozzáadja a PyShark modul tartalmát a Python szkript névteréhez:

4. lista: Importálja a PyShark modult

import pyshark

A csomagok elfogásának módszerei

A dobozból kiindulva a PyShark két különböző módot kínál, amelyekkel csomagokat gyűjthet a megfigyelt hálózati interfészről. A folyamatos gyűjtéshez használja a LiveCapture () metódust, a helyi fájlba történő mentéshez pedig a PyChure modul FileCapture () metódusát. Az eredmény egy csomaglista (Python iterator objektum), amely lehetővé teszi, hogy a rögzített adatcsomagokat csomagonként haladhassa át. Az alábbi felsorolások bemutatják a két módszer használatát.

5. lista: A PyShark segítségével rögzítheti az első wlan0 Wifi interfészt

import pyshark
elfog = pyshark.LiveCapture (interfész = 'wlan0')

Az előző állításokkal a rögzített hálózati csomagok a memóriában maradnak. A rendelkezésre álló memória korlátozott lehet, azonban az elfogott csomagok helyi fájlban történő tárolása alternatív megoldás. Használatban van a Pcap fájlformátum [9]. Ez lehetővé teszi, hogy a rögzített adatokat más eszközökkel dolgozza fel és értelmezze, amelyek a Pcap könyvtárhoz is kapcsolódnak.

6. lista: A PyShark segítségével tárolja az elfogott csomagokat egy helyi fájlban

import pyshark
elfog = pyshark.FileCapture ('/ tmp / hálózati csomagok.sapka')

Az 5. és 6. listát futtatva még nem lesz kimenete. A következő lépés az összegyűjtendő csomagok szűkítése a pontos kritériumok alapján.

Csomagok kiválasztása

A korábban bemutatott elfogási objektum kapcsolatot létesít a kívánt interfésszel. Ezután a két módszer a befogási objektum szimatolja () és folytonosan szippantja () a hálózati csomagokat. A sniff () visszatér a hívóhoz, amint az összes kért csomag összegyűlt. Ezzel szemben a sniff_continuously () egyetlen csomagot juttat el a hívóhoz, amint összegyűjtötte. Ez lehetővé teszi a hálózati forgalom élő közvetítését.

Ezenkívül a két módszer lehetővé teszi a csomagok különféle korlátozásainak és szűrési mechanizmusainak megadását, például a packet_count paramétert használó csomagok számát és azt az időszakot, amely alatt a csomagokat a timeout paraméter használatával kell összegyűjteni. A 7. lista bemutatja, hogyan lehet csak 50 hálózati csomagot gyűjteni élő közvetítésként a sniff_continuously () módszerrel.

7. lista: Gyűjtsön össze 50 hálózati csomagot a wlan0-ból

import pyshark
elfog = pyshark.LiveCapture (interfész = 'wlan0')
az elfogott csomagok számára.szippantás_folyamatosan (csomag_szám = 5):
nyomtatás (csomag)

Különböző csomagrészletek láthatók az utasítás nyomtatásával (csomag) (lásd 1. ábra).

1. ábra: csomag tartalma

A 7. listában mindenféle hálózati csomagot összegyűjtött, függetlenül attól, hogy milyen protokoll vagy szolgáltatási port van. A PyShark lehetővé teszi speciális szűrés elvégzését az úgynevezett BPF szűrő használatával [12]. A 8. lista bemutatja, hogyan lehet összegyűjteni 5 TCP-csomagot, amelyek a 80-as porton keresztül érkeznek és kinyomtatják a csomag típusát. Az információkat a legnagyobb_réteg csomagattribútum tárolja.

8. lista: Csak TCP-csomagok gyűjtése

import pyshark
elfog = pyshark.LiveCapture (interfész = 'wlan0', bpf_filter = 'tcp 80-as port')
elfog.szippantás (csomag_szám = 5)
nyomtatás (rögzítés)
elfogott csomag esetén:
nyomtatás (csomag.legmagasabb réteg)

A 8. lista mentése a tcp-sniff fájlként.py, és futtassa a Python szkriptet. A kimenet a következő:

9. lista: A 8. lista kimenete

# python3 tcp-szippantás.py

TCP
TCP
TCP
OCSP
TCP
#

Az elfogott csomagok kibontása

Az elfogott objektum orosz Matroska babaként működik - rétegenként, tartalmazza a megfelelő hálózati csomag tartalmát. A kicsomagolás kissé karácsonyszerűnek tűnik - soha nem lehet tudni, milyen információt talál benne, amíg nem nyitotta meg. A 10 felsorolás bemutatja 10 hálózati csomag elfogását és a protokoll típusának feltárását, mind a forrás, mind a cél portot és címet.

10. lista: A rögzített csomag forrásának és céljának megjelenítése

import pyshark
import idő
# define interface
networkInterface = "enp0s3"
# define elfogási objektum
elfog = pyshark.LiveCapture (interfész = networkInterface)
nyomtatás ("% s hallgatás"% networkInterface)
az elfogott csomagok számára.szippantás_folyamatosan (csomag_szám = 10):
# korrigált kimenet
próbáld ki:
# get timestamp
localtime = idő.tényállás (idő.helyi idő (idő.idő()))
# csomagtartalom beolvasása
protokoll = csomag.transport_layer # protokoll típusa
src_addr = csomag.ip.src # forráscím
src_port = csomag [protokoll].srcport # forrás port
dst_addr = csomag.ip.dst # rendeltetési cím
dst_port = csomag [protokoll].dstport # célport
# kimeneti csomaginformáció
nyomtatás ("% s IP% s:% s <-> % s:% s (% s) "% (localtime, src_addr, src_port, dst_addr, dst_port, protokoll))
kivéve az AttributeError as e:
# figyelmen kívül hagyja a TCP, UDP és IPv4 kivételével más csomagokat
passz
nyomtatás ("")

A szkript egy kimenetet generál, amint azt a 2. ábra mutatja, egyetlen sort fogadott csomagonként. Minden sor időbélyeggel kezdődik, amelyet a forrás IP-cím és port követ, majd a cél IP-cím és port, végül pedig a hálózati protokoll típusa.


2. ábra: Az elfogott csomagok forrása és rendeltetési helye

Következtetés

A saját hálózati szkenner elkészítése még soha nem volt ilyen egyszerű. A Wireshark alapjai alapján a PyShark átfogó és stabil keretet kínál a rendszer hálózati interfészeinek a kívánt módon történő figyelemmel kíséréséhez.

Linkek és hivatkozások

  • [1] Silver Moon: 18 parancs a hálózati sávszélesség figyelésére a Linux szerveren, https: // www.binaritidok.com / linux-commands-monitor-network /
  • [2] Python socket könyvtár, https: // docs.piton.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 és libpcap, http: // www.tcpdump.org /
  • [8] PyShark, projekt weboldala, http: // kiminewt.github.io / pyshark /
  • [9] Libpcap fájlformátum, Wireshark Wiki, https: // gitlab.com / wireshark / wireshark / - / wikis / Fejlesztés / LibpcapFileFormat
  • [10] Tshark, https: // www.drótcápa.org / docs / man-pages / tshark.html
  • [11] Apache Spark, https: // szikra.apache.org /
  • [12] BPF szűrő, https: // wiki.drótcápa.org / CaptureFilters
A legjobb parancssori játékok Linuxhoz
A parancssor nem csak a legnagyobb szövetséges a Linux használatakor, hanem a szórakozás forrása is lehet, mert sok olyan szórakoztató játék lejátszás...
A legjobb Gamepad Mapping alkalmazások Linuxhoz
Ha egy tipikus billentyűzet és egér beviteli rendszer helyett szeretnél játékokat játszani Linuxon egy játékvezérlővel, van néhány hasznos alkalmazás ...
Hasznos eszközök Linux játékosok számára
Ha szeretsz Linuxon játszani, akkor valószínű, hogy olyan alkalmazásokat és segédprogramokat használtál, mint a Wine, a Lutris és az OBS Studio a játé...