Kiedy wykonuję następujące polecenie Netcat i przeglądam pakiety za pomocą Wireshark , oznacza to, że pakiet UDP jest zniekształcony.
$ echo "this is a test" | nc -u 127.0.0.1 53
Podobnie, użycie poleceń takich jak $ echo "this is a test" > /dev/udp/127.0.0.1/53
produkowanie błędów „źle sformułowanego pakietu” w Wireshark.
Polecenie echo jest wysyłane / dostarczane do serwera Netcat bez błędów. Ale to mnie zastanowiło: czy można ręcznie zbudować odpowiedni pakiet UDP za pomocą echa lub innych rodzimych narzędzi uniksowych?
Używam Debiana i macOS.
echo $[61002+RANDOM%4532]
wybieram losowy numer portu w tym zakresie.Odpowiedzi:
Twój pakiet jest całkowicie ważny z punktu widzenia IP i UDP. Po rozwinięciu szczegółów protokołu Ethernet / IP / UDP w dolnym okienku Wireshark zobaczysz, że pakiet został pomyślnie przeanalizowany.
Ponieważ jednak jest przeznaczony dla portu 53, Wireshark próbuje go parsować jako pakiet DNS, czego nie może zrobić (ponieważ ciąg „to jest test” nie jest prawidłowym żądaniem DNS zgodnie ze specyfikacją RFC 1035 ).
Jeśli zastosujesz się do specyfikacji pod tym linkiem, będziesz w stanie skonstruować pakiet, który będzie ważny, gdy zostanie przeanalizowany jako żądanie DNS. Jeśli wyślesz pakiet do innego portu, zauważysz, że Wireshark nie będzie go już analizował jako żądania DNS i dlatego nie wyświetli tego ostrzeżenia.
źródło
Możesz wysłać je do specjalnych aliasów Bash z przekierowaniem.
Ze stron podręcznika Bash:
Spowoduje to wysłanie pakietu UDP do 192.168.2.11 do portu 8080:
źródło
Tutaj jest wiele pytań; roszczenie dotyczące „zniekształconego pakietu” może wynikać z odciążenia sumy kontrolnej, a jeśli tak, to jest to fałszywy błąd, ponieważ odzwierciedla on przechwytywanie pakietu, który nie ma pełnego widoku - część pracy została wykonana na sprzęcie sieciowym. WireShark powinien mieć dokumentację na ten temat.
W przeciwnym razie, różne narzędzia (takie jak
socat
,nc
lubnetcat
, albo przez bardzo podobnych cechach, takich jak w muszliksh93
lubbash
) mogą wziąć bajtów ze standardowego wejścia i zrzucić je do tego, co staje się pakiet UDP. To, czy jest to „właściwe”, zależy od protokołu; teoretycznie można w ten sposób skonstruować i wysłać pakiet DNS lub DHCP, chociaż częściej ludzie używają biblioteki lub dedykowanego oprogramowania, które (miejmy nadzieję) poprawnie implementuje dany protokół, ponieważ zwykle jest to o wiele bardziej zaangażowane niż ustawienie kilku bitów w treść pakietu i wysyłanie go za pośrednictwem przewodu, w szczególności obsługa odpowiedzi, ponawianie próby po przekroczeniu limitu czasu lub błędu, pola nagłówka pakietu itp. Protokoły są zwykle bardzo dobrze udokumentowane w RFC, lub zobacz serię książek „Illustrated TCP / IP Illustrated” autor: Stevens, aby uzyskać jeszcze więcej dokumentacji.Konkretne narzędzia, takie jak tworzenie
nmap
niestandardowych rzeczy za pomocą konstrukcji pakietów. W przeciwnym razie do ręcznej budowy pakietów zwykle używany jest język programowania, chociaż ponownie większość oprogramowania będzie wykorzystywać istniejące biblioteki lub usługi systemowe do wysyłania DNS, DHCP lub innych pakietów UDP, ponieważ są one znacznie mniej pracochłonne i znacznie mniej podatne na błędy niż ręczne tworzenie surowego kodu pakiet od zera.źródło