Як створити пакет UDP?


15

Коли я виконую таку команду Netcat і переглядаю пакети за допомогою Wireshark , він каже, що пакет UDP неправильно сформований.

$ echo "this is a test" | nc -u 127.0.0.1 53

Аналогічно, використовуючи такі команди, як $ echo "this is a test" > /dev/udp/127.0.0.1/53видають помилки у "неправильному пакеті" у Wireshark.

Введіть тут опис зображення

Команда echo надсилається / доставляється на сервер Netcat без помилок. Але це мене здивувало: чи можливо вручну сконструювати належний пакет UDP з ехою чи іншим нативним інструментом (Unix)?

Я використовую Debian і macOS.


10
Відповідно до вашого скріншоту, це не сам udp-пакет, який неправильно формується, але його вміст, оскільки порт 53 використовується для DNS, а ваш пакет не містить дійсного запиту DNS.
tkausl

@tkausl ви абсолютно праві. При використанні інших портів, ніж 53, немає помилок "неправильної форми". Дякую, що вказали на це.
користувач322500

1
Якщо ви не використовуєте стандартні протоколи, ви повинні використовувати порти в діапазоні від 49152 до 65535. Оскільки Linux за замовчуванням використовує діапазони 32768 до 60999 як ефемерні порти, я рекомендую не вибирати їх ні для нестандартних протоколів. Однак 61000 до 65535 - це чесна гра для нестандартних протоколів. Зазвичай я echo $[61002+RANDOM%4532]вибираю випадковий номер порту в цьому діапазоні.
kasperd

1
Не ввійдіть у систему як root. Ви повинні робити більшу частину своєї діяльності як некористувацький користувач. Якщо ви робите речі як root, ви повернетесь сюди із запитанням, як виправити вашу машину, і ми не зможемо допомогти (окрім як рекомендувати повторну інсталяцію).
ctrl-alt-delor

1
@tkausl Подивіться, що ви втратили за те, що не опублікували свій коментар як відповідь ....
Георгій Васильоу

Відповіді:


41

Ваш пакет повністю дійсний з точки зору IP та UDP. Якщо ви розгорнете деталі протоколу для Ethernet / IP / UDP на нижній панелі Wireshark, ви побачите, що пакет успішно проаналізований.

Однак, як це призначено для порту 53, Wireshark намагається проаналізувати його як пакет DNS, що він не може зробити (оскільки рядок "це тест" не є дійсним запитом DNS на специфікацію RFC 1035 ).

Якщо ви будете дотримуватися специфікації за цим посиланням, ви зможете сконструювати пакет, дійсний під час розбору як запит DNS. Якщо ви відправляєте пакет на інший порт, ви помітите, що Wireshark більше не буде його розбирати як запит DNS і, отже, не показуватиме це попередження.


15

Ви можете надіслати їх до Bash спеціальних псевдонімів з перенаправленням.

Від керівних записів Баша:

/ dev / tcp / хост / порт Якщо хост - це дійсне ім'я хоста або адреса Інтернету, а порт - це цілий номер порту або ім'я послуги, bash намагається відкрити відповідний сокет TCP.

/ dev / udp / host / port Якщо хост - дійсне ім'я хоста або адреса Інтернету, а порт - це цілий номер порту або ім'я послуги, bash намагається відкрити відповідний сокет UDP.

Це відправить пакет UDP на 192.168.2.11 на порт 8080:

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

Дякую за цю відповідь. Я оновив своє запитання. На жаль, використання вашого методу також створює повідомлення про помилку "неправильно сформований пакет".
користувач322500

-1

Тут є кілька запитань; претензія на "неправильно сформований пакет" може бути наслідком завантаження контрольної суми, і якщо це помилкова помилка, оскільки вона відображає захоплення пакету, не має повного перегляду - натомість частина робіт була виконана на мережевому апаратному забезпеченні. WireShark повинна мати документацію щодо цього.

В іншому випадку різні інструменти (такі як socat, ncабо netcatчерез надзвичайно подібні функції оболонок, такі як ksh93або bash) можуть приймати байти зі стандартного введення та скидати їх у те, що стає пакетом UDP. Чи є це "правильним", залежить від протоколу; теоретично можна побудувати та надіслати пакет DNS або DHCP таким чином, хоча частіше люди використовують бібліотеку або спеціальне програмне забезпечення, яке (сподіваємось) правильно реалізує відповідний протокол, оскільки зазвичай набагато більше, ніж встановлювати кілька біт у тіло пакету та надсилання його по дроту, зокрема обробка відповідей, повторна спроба після таймауту або помилки, поля заголовка пакету тощо. Протоколи, як правило, дуже добре задокументовані в RFC, або дивіться книгу "TCP / IP Illustrated", серію книг Стівенс для ще більшої документації.

Конкретні інструменти, такі як nmapробити дуже замовні речі з побудовою пакетів. Інакше для ручної побудови пакетів зазвичай використовується мова програмування, хоча знову ж таки більшість програмного забезпечення використовуватиме існуючі бібліотеки або системні служби для надсилання DNS або DHCP або інших пакетів UDP, оскільки це набагато менше роботи і набагато менше схильності до помилок, ніж обробка сировини вручну пакет з нуля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.