Використовуючи bash '/ dev / udp`, як я можу знати, якщо порт був відкритим?


14

У мене немає доступу до цього netcatабо nmapтому я намагаюся використовувати bashі /dev/udp/спеціальні файли для тестування портів.

Я міг би зробити щось на кшталт:

echo "" > /dev/udp/example.com/8000

Але $?це завжди 0при використанні UDP. Я припускаю, що це тому, що це повернене значення echo ""команди?

Я в основному намагаюся повторити те, що я в змозі зробити, nmapі netcat:

nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'

Як би я це зробив /dev/udp?


1
UDP не гарантує доставку, тому навіть якщо Баш вважає, що це вдалося відправити, повідомлення, можливо, було знищено в дорозі. Як ви перевірили невдале надсилання (не невдале з'єднання: UDP не з'єднання)?
— Жил "ТАК - перестань бути злим"

Відповіді:


13

Для tcp, просто перевіряйте $?. Якщо з'єднання не вдалося, $?не буде 0:

$ >/dev/tcp/google.com/81
bash: connect: Network is unreachable
bash: /dev/tcp/google.com/81: Network is unreachable
$ echo $?
1

Мине час, bashщоб зрозуміти, що з'єднання не вдалося. Ви можете використовувати тайм-аут для запуску bash:

$ timeout 1 bash -c '>/dev/tcp/google.com/80' &&
  echo Port open ||
  echo Port close
Port open

Тестування udp-порта є складнішим.

Строго кажучи, немає відкритого стану (звичайно, udp - протокол без стану ) з udp. Є лише два стани з udp, слухають чи ні . Якщо стан відсутній , ви отримаєте пункт призначення ICMP недоступним .

На жаль, брандмауер або маршрутизатор часто скидають ці ICMP-пакети, тож ви не будете впевнені, який стан udp-порту.


Перефразовуючи моє запитання, щоб зосередитись на UDP. Мої вибачення за редакцію ніндзя. Я думав, що це буде подібне, тому не робив відмінностей. Дякуємо, що очистили його.
— Белмін Фернандес

10

Взагалі, не можна.

На відміну від TCP, UDP не пов'язаний. Ви не можете виявити, що порт відкритий, просто зробивши з ним без підключення нічого, як можна з TCP. Швидше, вам потрібно надіслати дані до порту і подивитися, що відбувається, а деталі UDP, реалізовані в реальному світі, ускладнюють інтерпретацію результатів. Навіть складні засоби на рівні пакетів, як-от, nmapне можуть точно сказати, чи є програма, яка прослуховує певний порт UDP. nmapкласифікує порти UDP на три групи:

  1. Однозначно відкритий. Відправлення пакету до порту викликало відповідь даних від машини призначення.
  2. Однозначно закрито. Якщо надіслати пакет до порту, з машини призначення вийшло повідомлення "ICMP Destination Unreachable".
  3. Або відкритим, або фільтруваним. Надіслати пакет до порту не викликало жодної відповіді. Можливо, є брандмауер, який скидає пакети; можливо, є програма прослуховування і nmapпросто не зрозуміла, як отримати відповідь; можливо, користувачеві просто не пощастило, і всі пакети були втрачені в дорозі.

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