Когда я выполняю следующую команду 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 с помощью echo или какого-либо другого собственного инструмента Unix?
Я использую Debian и MacOS.
echo $[61002+RANDOM%4532]
чтобы выбрать случайный номер порта в этом диапазоне.Ответы:
Ваш пакет полностью действителен с точки зрения IP и UDP. Если вы развернете подробности протокола для Ethernet / IP / UDP в нижней панели Wireshark, вы увидите, что пакет успешно проанализирован.
Однако, поскольку он предназначен для порта 53, Wireshark пытается проанализировать его как пакет DNS, что не может сделать (поскольку строка «это тест» не является допустимым запросом DNS согласно спецификации RFC 1035 ).
Если вы будете следовать спецификации по этой ссылке, вы сможете создать пакет, который действителен при анализе в виде запроса DNS. Если вы отправите пакет на другой порт, вы заметите, что Wireshark больше не будет анализировать его как запрос DNS и, следовательно, не будет отображать это предупреждение.
источник
Вы можете отправить их в Bash специальные псевдонимы с перенаправлением.
Из страниц Bash:
Это отправит пакет UDP на 192.168.2.11 на порт 8080:
источник
Здесь есть несколько вопросов; утверждение о «неверно сформированном пакете» может быть связано с разгрузкой контрольной суммы и, если это так, является ложной ошибкой, поскольку отражает захват пакета, не имеющий полного представления, - вместо этого часть работы была выполнена на сетевом оборудовании. WireShark должен иметь документацию по этому вопросу.
В противном случае различные инструменты (например
socat
,nc
илиnetcat
, или с помощью чрезвычайно похожих функций в оболочках, таких какksh93
илиbash
) могут брать байты из стандартного ввода и выгружать их в пакет UDP. Является ли это «правильным», зависит от протокола; теоретически можно построить и отправить пакет DNS или DHCP таким образом, хотя чаще люди используют библиотеку или специальное программное обеспечение, которое (надеюсь) правильно реализует рассматриваемый протокол, поскольку обычно требуется гораздо больше, чем установка нескольких битов в тело пакета и его отправка по сети, в частности, обработка ответов, повторная попытка после тайм-аута или ошибки, поля заголовка пакета и т. д. Протоколы обычно очень хорошо документированы в RFC или см. серию книг «Иллюстрированный TCP / IP». Стивенсом для еще большей документации.Конкретные инструменты, такие как
nmap
очень нестандартные вещи при создании пакетов. В противном случае для ручного создания пакетов обычно используется язык программирования, хотя, опять же, большинство программного обеспечения будет использовать существующие библиотеки или системные службы для отправки DNS, DHCP или других UDP-пакетов, поскольку они гораздо менее трудоемки и гораздо менее подвержены ошибкам, чем ручное создание необработанного пакет с нуля.источник