Główny Inny Jak korzystać z Lua Dissector w Wireshark

Jak korzystać z Lua Dissector w Wireshark



Jako jedno z najlepszych na świecie narzędzi do przechwytywania pakietów sieciowych, Wireshark umożliwia uzyskiwanie określonych pakietów danych, dzięki czemu można je analizować zarówno w trybie offline, jak iw czasie rzeczywistym. Pomyśl o aplikacji jako o sposobie na dokładne zbadanie danych przepływających przez Twoją sieć, co pozwoli Ci wychwycić problemy i nieprawidłowości.

  Jak korzystać z Lua Dissector w Wireshark

Możesz użyć dysektorów, jeśli chcesz przeanalizować określoną część danych pakietu. Jak sama nazwa wskazuje, proces ten „analizuje” kod, umożliwiając wycięcie pewnych aspektów, które wymagają Twojej uwagi. W tym samouczku wyjaśniono, jak tworzyć i używać dysektorów w programie Wireshark przy użyciu języka skryptowego Lua.

Zanim zaczniesz – co musisz wiedzieć o dysektorach

Chociaż dysektorzy oferują szybki sposób analizy części pakietu danych w programie Wireshark, muszą przestrzegać pewnych protokołów, aby działać efektywnie. Protokoły te obejmują:

  • Każdy tworzony dysektor musi zostać zarejestrowany, aby mógł obsłużyć ustawiony typ ładunku z innego protokołu. Aby ukończyć tę rejestrację, musisz przypisać obiekt „Proto” do swojego dysektora, co zobaczysz poniżej.
  • Kiedy dzwonisz do dysektora przez Wireshark, otrzymuje on trzy rzeczy z aplikacji:
    • TVB Object – Bufor TVB z pakietu danych.
    • Obiekt TreeItem — element główny drzewa reprezentujący pojedynczy węzeł w drzewie danych.
    • Obiekt Pinfo – Rekord informacji o pakiecie.
  • Możesz wywołać dissector tylko wtedy, gdy twój pakiet danych pasuje do DissectorTable, który ustawiłeś dla swojego obiektu „Proto”.
    • Możesz obejść ten wymóg, wymuszając użycie dysektora za pomocą funkcji „Dekoduj jako”. Ale nawet wtedy możesz wymusić dysektor tylko wtedy, gdy DissectorTable, który ustawiłeś dla swojego obiektu „Proto”, jest właściwego typu.

Konfigurowanie Dissectora za pomocą LUA

Ponieważ Wireshark jest zarówno napisany w języku programowania C, jak i używa go, większość dissectorów jest podobnie napisana w C. Możesz jednak użyć Lua. Ten język skryptowy jest prostszy niż C, a przez to bardziej dostępny dla nowicjuszy lub tych, którzy po prostu chcą stworzyć dysektor przy użyciu lżejszego języka.

Chociaż twój kod będzie prostszy, dysektor, który uzyskasz, używając Lua, jest zwykle wolniejszy niż ten, który utworzysz za pomocą C. Niemniej jednak są to kroki, które należy wykonać, jeśli chcesz utworzyć dysektor Wireshark za pomocą Lua.

jak spojrzeć na czyjąś historię snapchat

Krok 1 – Skonfiguruj Lua w Wireshark

Będziesz musiał skonfigurować Lua, jeśli nie używałeś go wcześniej w Wireshark:

  1. Kliknij „Pomoc”, a następnie „O programie Wireshark”.
  2. Kliknij „Foldery”.
  3. Wybierz jedną z poniższych opcji, aby utworzyć aktywny skrypt Lua:
    • Globalne wtyczki Lua
    • Osobiste wtyczki Lua
    • Osobisty

Po aktywacji skrypt będzie gotowy za każdym razem, gdy uruchomisz Wireshark. Za każdym razem, gdy dokonujesz zmiany w tym skrypcie, musisz albo zrestartować Wireshark, aby zarejestrować zmianę, albo nacisnąć „Ctrl + Shift + L”, aby ponownie załadować wszystkie skrypty Lua, aby zmiany były aktywne.

Krok 2 – Podstawowe kroki tworzenia Dissectora

Jeśli znasz już Lua, możesz wykonać następujące kroki, aby stworzyć własny skrypt dissektora, który będzie działał w Wireshark:

jak usunąć dodatkową stronę w google docs?
  • Zadeklaruj protokół dla swojego dysektora, co wymaga ustawienia zarówno długiej nazwy do użycia w drzewie protokołów, jak i krótkiej nazwy, która służy jako nazwa filtru wyświetlania dysektora.
    • Utwórz następujące trzy pola z odpowiednimi typami:
    • Pytanie – pokazuje typ pytania.
    • Odpowiedź – pokazuje typ odpowiedzi.
  • MessageType — pokazuje, czy pakiet żąda pytania, czy odpowiedzi.
  • Zarejestruj swoje pola, aby Wireshark wiedział, jak je wyświetlić. Bez zarejestrowanych pól otrzymasz komunikat „Błąd Lua”, zwykle informujący, że ProtoField elementu drzewa jest nieprawidłowe.
  • Utwórz funkcję rozbioru, która zawiera wspomniane wcześniej Pinfo (zawierające dane o twoim pakiecie) i element drzewa (tworząc drzewo, które dołączysz do poddrzewa). Musisz także utworzyć „bufor”, który znajduje się na wierzchu twojego TCP.
  • Określ zarówno protokół, jak i port, dla których Wireshark ma używać dissectora. Na przykład możesz ustawić protokół na „TCP”, a numer portu na dowolny, którego chcesz użyć.

Krok 3 – Dodaj swój Dissector do Wireshark

W tej chwili twój dysektor jest jak żarówka bez elektryczności. Istnieje, ale jest dla ciebie bezużyteczny, dopóki nie przepuścisz przez niego trochę mocy. Innymi słowy, Twój dysektor nie został jeszcze dodany do Wireshark, więc musisz dodać go ręcznie, aby uruchomić, wykonując następujące czynności:

  1. Kliknij „Pomoc” i przejdź do menu „Informacje o Wireshark”.
  2. Wybierz zakładkę „Folder”, aby znaleźć listę ścieżek do pliku Lua.
  3. Wybierz „Osobiste wtyczki Lua”. W razie potrzeby utwórz katalog.
  4. Skopiuj i wklej utworzony plik Lua do katalogu „Personal Lua Plugins”. Załaduj ponownie program Wireshark, aby włączyć dysektor.

Dobrym pomysłem jest przeprowadzenie testu na nowym dysektorze, otwierając niektóre z przechwyconych pakietów. Wireshark powinien dostarczyć wiadomość zawierającą długą nazwę, którą wybrałeś dla swojego dysektora, wraz z informacją o typie wiadomości (pytanie lub odpowiedź) i wyniku sprawdzenia.

Jakiś przykładowy kod

Jeśli wcześniej nie tworzyłeś dysektora (lub jesteś nowy w Lua), Wireshark oferuje przydatny przykład dissektora do wypróbowania:

nie można kliknąć przycisku Start w systemie Windows 10
local p_multi = Proto("multi", "MultiProto");
local vs_protos = {
    [2] = "mtp2",
    [3] = "mtp3",
    [4] = "alcap",
    [5] = "h248",
    [6] = "ranap",
    [7] = "rnsap",
    [8] = "nbap"
}
local f_proto = ProtoField.uint8("multi.protocol", "Protocol", base.DEC, vs_protos)
local f_dir = ProtoField.uint8("multi.direction", "Direction", base.DEC, { [1] = "incoming", [0] = "outgoing"})
local f_text = ProtoField.string("multi.text", "Text")
p_multi.fields = { f_proto, f_dir, f_text }
local data_dis = Dissector.get("data")
local protos = {
    [2] = Dissector.get("mtp2"),
    [3] = Dissector.get("mtp3"),
    [4] = Dissector.get("alcap"),
    [5] = Dissector.get("h248"),
    [6] = Dissector.get("ranap"),
    [7] = Dissector.get("rnsap"),
    [8] = Dissector.get("nbap"),
    [9] = Dissector.get("rrc"),
    [10] = DissectorTable.get("sctp.ppi"):get_dissector(3), -- m3ua
    [11] = DissectorTable.get("ip.proto"):get_dissector(132), -- sctp
}
function p_multi.dissector(buf, pkt, tree)
    local subtree = tree:add(p_multi, buf(0,2))
    subtree:add(f_proto, buf(0,1))
    subtree:add(f_dir, buf(1,1))
    local proto_id = buf(0,1):uint()
    local dissector = protos[proto_id]
    if dissector ~= nil then
        -- Dissector was found, invoke subdissector with a new Tvb,
        -- created from the current buffer (skipping first two bytes).
        dissector:call(buf(2):tvb(), pkt, tree)
    elseif proto_id < 2 then
        subtree:add(f_text, buf(2))
        -- pkt.cols.info:set(buf(2, buf:len() - 3):string())
    else
        -- fallback dissector that just shows the raw data.
        data_dis:call(buf(2):tvb(), pkt, tree)
    end
end
local wtap_encap_table = DissectorTable.get("wtap_encap")
local udp_encap_table = DissectorTable.get("udp.port")
wtap_encap_table:add(wtap.USER15, p_multi)
wtap_encap_table:add(wtap.USER12, p_multi)
udp_encap_table:add(7555, p_multi)

Postdissectors i Chained Dissectors

Po opanowaniu tworzenia ich w Lua możesz chcieć bardziej zagłębić się w użycie dysektora. Wireshark oferuje dwa dodatkowe typy dysektorów – dysektory końcowe i dysektory łańcuchowe – które oferują większą funkcjonalność.

Postdysektor jest bardzo podobny do ostatecznego sprawdzenia wszystkich dysektorów, które uruchomiłeś dla pakietu. Rejestrujesz go, aby otrzymywać powiadomienia, gdy Wireshark zadzwoni do każdego innego dysektora, którego chcesz użyć, i możesz go użyć do filtrowania kolumn „Protokół” i „Informacje”. Ta funkcja jest szczególnie przydatna, jeśli chcesz odfiltrować wiele pakietów w sesji, w której masz długą przerwę między zestawami danych i nie możesz przywołać każdego z nich osobno.

Łańcuch dysektorów pełni podobną funkcję (przynajmniej w zakresie filtrowania wcześniej używanych dysektorów), dając dostęp do danych pojedynczego dysektora. Kluczową zaletą jest to, że połączony dysektor nie musi ponownie przechodzić przez każdy pakiet, dając wynik bez zmuszania cię do czekania na ponowne uruchomienie oryginalnego dysektora.

Sekcja w Lua

Biorąc pod uwagę, że Wireshark oferuje już możliwość tworzenia dysektorów w C (jego naturalnym języku), możesz nie widzieć potrzeby tworzenia ich również w Lua. Mimo to ci, którzy nie czują się dobrze w C, a także ci, którzy opanowali już Lua, mogą stwierdzić, że lekkie skrypty Lua ułatwiają tworzenie ich dysektorów. To prawda, że ​​musisz poświęcić dłuższy czas ładowania podczas uruchamiania procesu w porównaniu z dysektorami opartymi na C, ale niezależnie od tego warto mieć taką opcję.

Powiedziawszy to, chcemy usłyszeć od ciebie. Jak często używasz dysektorów w Wireshark? Czy próbowałeś już tworzyć je w C i jakie korzyści, Twoim zdaniem, daje tworzenie dysektorów w Lua? Daj nam znać w sekcji komentarzy poniżej.

Ciekawe Artykuły

Wybór Redakcji

Szybka wskazówka: znajdź adres IP swojego komputera w systemie Windows
Szybka wskazówka: znajdź adres IP swojego komputera w systemie Windows
Adres IP twojego komputera to unikalny zestaw cyfr, które identyfikują i rozróżniają go w twojej sieci lokalnej. Znajomość lokalnego adresu IP komputera umożliwia konfigurowanie folderów współdzielonych i łączenie się z nimi, korzystanie z pulpitu zdalnego oraz konfigurowanie przydatnych opcji konfiguracji po stronie routera. Oto jak znaleźć swój adres IP w systemie Windows.
Jak sprawdzić, jaki masz GPU
Jak sprawdzić, jaki masz GPU
Znajomość mocy i szybkości procesora graficznego (GPU) w komputerze jest ważna z kilku powodów - pomaga określić, czy urządzenie może obsługiwać określoną aplikację lub grę. To powiedziawszy, jeśli kupisz
Jak uzyskać weryfikację w Discord
Jak uzyskać weryfikację w Discord
Darmowy tekst, VoIP, wideo i platforma czatowa Discorda oferuje o wiele więcej niż na pierwszy rzut oka. Jego unikalne funkcje obejmują integrację z Twitch i wiele innych niezbędnych dla streamerów, twórców treści i zwykłych użytkowników. Czy jesteś
Jak kopiować i zapisywać obrazy z Safari na Macu?
Jak kopiować i zapisywać obrazy z Safari na Macu?
Wbudowana przeglądarka internetowa komputera Mac, Safari, ma specjalne menu, które umożliwia kopiowanie, zapisywanie lub kopiowanie łącza do prawie każdego znalezionego obrazu. W tym artykule mamy wszystkie szczegóły, jak to działa! Oczywiście ze zwykłymi zastrzeżeniami dotyczącymi niekorzystania z cudzej pracy, gdy nie masz na to pozwolenia. Nie zapomnij o tej części.
Jak włączyć XMP
Jak włączyć XMP
Włączenie XMP może sprawić, że pamięć RAM będzie działać znacznie szybciej i znacznie poprawić wydajność systemu, szczególnie jeśli pamięć RAM stanowi wąskie gardło dla procesora.
Jak dodawać podpisy do obrazów w Dokumentach Google
Jak dodawać podpisy do obrazów w Dokumentach Google
Dosłowne opisy obrazów mogą zapewnić dodatkowy kontekst obrazom. Możesz zweryfikować obraz, uwierzytelnić go, udostępnić jego pochodzenie i podać autora oryginalnego. Bez względu na powód, napisy mają duże znaczenie. W dokumentach formalnych lub urzędowych podpis może
Jak scalić pliki audio
Jak scalić pliki audio
Scalanie plików audio lub łączenie jest przydatne do tworzenia ścieżek dźwiękowych do filmów, miksów bez przerw lub własnego strumienia audio do odtwarzania jako MP3. Streaming może być teraz sposobem na rzeczy, ale jeśli posiadasz swoją muzykę