Istniejące narzędzia
Od dłuższego czasu istnieje wiele narzędzi do analizy sieci. Na przykład pod Linux są to Wireshark, TCPDump, Nload, IFTOP, IPTRAF, Nethogs, BMON, TCPTRACK, a także prędkościomierza i Ettercap. Aby uzyskać szczegółowy opis, możesz rzucić okiem na porównanie Silver Moon [1].
Dlaczego więc nie użyć istniejącego narzędzia i napisz własnego, zamiast tego? Powody, dla których widzę, lepiej rozumieją protokoły sieci TCP/IP, uczenie się, jak prawidłowo kodować lub wdrażanie tylko konkretnej funkcji potrzebnej do użytku, ponieważ istniejące narzędzia nie dają ci tego, czego faktycznie potrzebujesz. Ponadto ulepszenia prędkości i obciążenia w aplikacji/systemie mogą również odgrywać rolę, która motywuje do poruszania się w tym kierunku.
Na wolności istnieje kilka bibliotek Python do przetwarzania i analizy sieciowej. Do programowania niskiego poziomu biblioteka gniazd [2] jest kluczem. Biblioteki oparte na protokole wysokiego poziomu to HTTPLIB, FTPLIB, IMAPLIB i SMTPLIB. W celu monitorowania portów sieciowych i konkurencyjnych kandydatów na strumień pakietu są używane Python-Nmap [3], DPKT [4] i Pyshark [5]. Zarówno do monitorowania, jak i zmiany strumienia pakietu, biblioteka SCapy [6] jest szeroko stosowana.
W tym artykule przyjrzymy się bibliotece Pyshark i monitorowanie, które pakiety osiągają określony interfejs sieciowy. Jak zobaczysz poniżej, praca z Pyshark jest prosta. Dokumentacja na stronie internetowej projektu pomoże Ci w pierwszych krokach - dzięki niej bardzo szybko osiągniesz użyteczny wynik. Jednak jeśli chodzi o drobiazgowe, konieczne jest więcej wiedzy.
Pyshark może zrobić o wiele więcej, niż się wydaje na pierwszy rzut oka, i niestety w chwili pisania tego tekstu istniejąca dokumentacja nie obejmuje tego w całości. To sprawia, że niepotrzebnie jest trudne i stanowi dobry powód, aby spojrzeć głębiej pod maską.
O PYSHARK
Pyshark [8] to opakowanie Pythona dla TShark [10]. Po prostu wykorzystuje swoją zdolność do eksportowania danych XML za pomocą jego parsingu. Sam TShark to wersja wiersza polecenia Wireshark. Zarówno TShark, jak i Pysshark zależą od biblioteki PCAP, która faktycznie przechwytuje pakiety sieciowe i jest utrzymywane pod maską TCPDump [7]. Pyshark jest opracowywany i stale utrzymywany przez Dan (używa nazwy Kiminewt na Twitterze).
Aby zapobiec możliwym zamieszaniu, istnieje podobnie brzmiące narzędzie, Apache Spark [11], które jest ujednoliconym silnikiem analitycznym do przetwarzania danych na dużą skalę. Nazwa PYSPARK jest używana do interfejsu Pythona do Apache Spark, którego nie omawiamy tutaj.
Instalowanie Pyshark
Pyshark wymaga zainstalowania zarówno biblioteki PCAP, jak i TShark. Odpowiednie pakiety dla Debian GNU/Linux 10 i Ubuntu nazywane są libpcap0.8 i TShark i można je skonfigurować w następujący sposób za pomocą apt-get:
Lista 1: Instalowanie biblioteki PCAP i TSHARK
# PIP3 Zainstaluj Python-Pytshark
Jeśli jeszcze nie zainstalowane, należy też dodać Python3 i Pip. Odpowiednie pakiety dla Debian GNU/Linux 10 i Ubuntu nazywane są Python3 i Python3-Pip i można je zainstalować w następujący sposób za pomocą Apt-Get:
Lista 2: Zainstaluj Python 3 i PIP dla Python 3
# apt-get instal Python3 Python3-Pip
Teraz nadszedł czas, aby dodać Pyshark. Na podstawie naszych badań Pytshark nie jest jeszcze pakowany dla żadnej dużej dystrybucji Linuksa. Instalacja odbywa się przy użyciu instalatora pakietu Python PIP3 (PIP dla Python 3) jako pakietu całego systemu w następujący sposób:
Lista 3: Zainstaluj Pyshark za pomocą PIP
# PIP3 Zainstaluj Python-Pytshark
Teraz Pyshark jest gotowy do użycia w skryptach Python w systemie Linux. Uwaga, aby wykonać skrypty Python poniżej jako użytkownik administracyjny, na przykład za pomocą Sudo, ponieważ biblioteka PCAP nie pozwala na poszukiwanie pakietów jako zwykłego użytkownika.
Poniższe stwierdzenie dodaje zawartość modułu Pyshark do przestrzeni nazw twojego skryptu Python:
Lista 4: Zaimportuj moduł Pyshark
Import PysharkMetody przechwytywania pakietów
Po wyjęciu z pudełka Pyshark jest wyposażony w dwa różne tryby, z którymi oferuje zbieranie pakietów z obserwowanego interfejsu sieciowego. Do ciągłego gromadzenia użyj metody LiveCapture () i zapisywania w pliku lokalnym, użyj metody FiCapture () z modułu Pyshark. Rezultatem jest lista pakietów (obiekt Python iterator), który pozwala przejść przez pakiet przechwyconego danych według pakietu. Poniższe listy pokazują, jak używać dwóch metod.
Lista 5: Użyj Pyshark, aby przechwytywać z pierwszego interfejsu Wi -Fi WLAN0
Import PysharkW przypadku poprzednich stwierdzeń przechwycone pakiety sieciowe są przechowywane w pamięci. Dostępna pamięć może być jednak ograniczona, przechowywanie przechwyconych pakietów w pliku lokalnym jest alternatywą. W użyciu jest format pliku PCAP [9]. Pozwala to przetwarzać i interpretować przechwycone dane według innych narzędzi, które są również połączone z biblioteką PCAP.
Lista 6: Użyj Pyshark, aby przechowywać przechwycone pakiety w pliku lokalnym
Import PysharkUruchamiając oferty 5 i 6, nie będziesz jeszcze mieć wyjścia. Następnym krokiem jest zawęzienie pakietów, które zostaną zebrane dokładniej na podstawie pożądanych kryteriów.
Wybieranie pakietów
Wcześniej wprowadzony obiekt przechwytywania ustanawia połączenie z pożądanym interfejsem. Następnie dwie metody Sniff () i Sniff_Contouss () obiektu przechwytywania zbierają pakiety sieciowe. Sniff () wraca do dzwoniącego, gdy tylko wszystkie żądane pakiety zostaną zebrane. Natomiast Sniff_contouss () dostarcza pojedynczy pakiet dzwoniącego, gdy tylko został zebrany. Umożliwia to strumień na żywo ruchu sieciowego.
Ponadto te dwie metody pozwalają określić różne ograniczenia i mechanizm filtrowania pakietów, na przykład liczba pakietów za pomocą parametrów packet_count i okres, w którym pakiety mają być gromadzone za pomocą czasu parametru czasu. Listing 7 pokazuje, jak zbierać 50 pakietów sieciowych tylko jako strumień na żywo, przy użyciu metody Sniff_contouss ().
Lista 7: Zbierz 50 pakietów sieciowych z WLAN0
Import PysharkRóżne szczegóły pakietów są widoczne przy użyciu instrukcji drukuj (pakiet) (patrz rysunek 1).
Rysunek 1: Treść pakietu
Na liście 7 zebrałeś wszelkiego rodzaju pakiety sieciowe bez względu na protokół lub port serwisowy. PYSHARK umożliwia wykonanie zaawansowanego filtrowania za pomocą tak zwanego filtra BPF [12]. Listing 8 pokazuje, jak zbierać 5 pakietów TCP przybywających przez port 80 i drukuje typ pakietu. Informacje są przechowywane w atrybucie pakietu najwyższej klasy.
Lista 8: Zbieranie pakietów TCP tylko
Import PysharkZapisz listę 8, jako plik tcp-sniff.PY i uruchom skrypt Python. Wyjście jest następujące:
Lista 9: Wyjście listy 8
# Python3 Tcp-Sniff.py
TCP
TCP
TCP
OCSP
TCP
#
Rozpakowanie przechwyconych pakietów
Zabryczony obiekt działa jako rosyjska lalka Matroska - warstwa po warstwie, zawiera zawartość odpowiedniego pakietu sieciowego. Rozpakowanie przypomina trochę Boże Narodzenie - nigdy nie wiesz, jakie informacje znajdujesz w środku, dopóki ich nie otworzyłeś. Listing 10 pokazuje przechwytywanie 10 pakietów sieciowych i ujawnienie typu protokołu, zarówno portu i adresu źródłowego, jak i docelowego.
Lista 10: Pokazanie źródła i miejsca docelowego przechwyconego pakietu
Import PysharkSkrypt generuje dane wyjściowe, jak pokazano na rysunku 2, pojedynczy wiersz na odebrany pakiet. Każda linia zaczyna się od znacznika czasu, a następnie źródłowego adresu IP i portu, a następnie docelowego adresu IP i portu, a na koniec typu protokołu sieciowego.
Rysunek 2: Źródło i miejsce docelowe dla przechwyconych pakietów
Wniosek
Budowanie własnego skanera sieciowego nigdy nie było łatwiejsze niż to. W oparciu o fundamenty Wireshark, Pyshark oferuje kompleksowe i stabilne ramy do monitorowania interfejsów sieciowych systemu w sposób, w jaki go potrzebujesz.
Linki i referencje