Використовуючи 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.