Jak utworzyć pakiet UDP?


15

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/53produkowanie błędów „źle sformułowanego pakietu” w Wireshark.

Wpisz opis zdjęcia tutaj

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.


10
Zgodnie z twoim zrzutem ekranu nie jest to sam pakiet udp, który jest zniekształcony, ale jego zawartość, ponieważ port 53 jest używany do DNS, a twój pakiet nie zawiera prawidłowego żądania DNS.
tkausl

@tkausl masz absolutną rację. Podczas używania portów innych niż 53 nie występują błędy „zniekształcone”. Dziękujemy za zwrócenie na to uwagi.
user322500,

1
Jeśli nie używasz standardowych protokołów, powinieneś używać portów z zakresu od 49152 do 65535. Ponieważ Linux domyślnie używa zakresów od 32768 do 60999 jako efemerycznych portów, polecam nie wybierać tych portów dla niestandardowych protokołów. Jednak 61000 do 65535 są uczciwą grą dla niestandardowych protokołów. Zwykle echo $[61002+RANDOM%4532]wybieram losowy numer portu w tym zakresie.
kasperd

1
Nie loguj się jako root. Powinieneś wykonywać większość swojej aktywności jako użytkownik inny niż root. Jeśli robisz rzeczy jako root, wrócisz tutaj z pytaniem, jak naprawić swój komputer, a my nie będziemy w stanie pomóc (z wyjątkiem zalecania ponownej instalacji).
ctrl-alt-delor

1
@tkausl Zobacz, co straciłeś, ponieważ nie opublikowałeś swojego komentarza jako odpowiedzi ....
George Vasiliou

Odpowiedzi:


41

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.


15

Możesz wysłać je do specjalnych aliasów Bash z przekierowaniem.

Ze stron podręcznika Bash:

/ dev / tcp / host / port Jeśli host jest prawidłową nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą lub nazwą usługi, bash próbuje otworzyć odpowiednie gniazdo TCP.

/ dev / udp / host / port Jeśli host jest poprawną nazwą hosta lub adresem internetowym, a port jest liczbą całkowitą lub nazwą usługi, bash próbuje otworzyć odpowiednie gniazdo UDP.

Spowoduje to wysłanie pakietu UDP do 192.168.2.11 do portu 8080:

echo "This is a test" > /dev/udp/192.168.2.11/8080

Dziękuję za tę odpowiedź. Zaktualizowałem moje pytanie. Niestety użycie tej metody powoduje również wyświetlenie komunikatu o błędzie „nieprawidłowo sformatowany pakiet”.
user322500,

-1

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, nclub netcat, albo przez bardzo podobnych cechach, takich jak w muszli ksh93lub bash) 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 nmapniestandardowych 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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.