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.
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:
- Kliknij „Pomoc”, a następnie „O programie Wireshark”.
- Kliknij „Foldery”.
- 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:
- Kliknij „Pomoc” i przejdź do menu „Informacje o Wireshark”.
- Wybierz zakładkę „Folder”, aby znaleźć listę ścieżek do pliku Lua.
- Wybierz „Osobiste wtyczki Lua”. W razie potrzeby utwórz katalog.
- 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.