Nie mam dostępu do netcat
lub nmap
więc staram się używać bash
i /dev/udp/
specjalne pliki do portów testowych.
Mógłbym zrobić coś takiego:
echo "" > /dev/udp/example.com/8000
Ale $?
zawsze tak jest 0
przy korzystaniu z UDP. Zakładam, że to dlatego, że jest to zwracana wartość echo ""
polecenia poprawna?
Zasadniczo próbuję powtórzyć to, co mogę zrobić, nmap
i netcat
:
nmap -sU -p 8000 example.com | grep open >/dev/null && echo 'open'
nc -z -u example.com 8000 && echo 'open'
Jak miałbym to zrobić /dev/udp
?
bash
networking
devices
Belmin Fernandez
źródło
źródło
Odpowiedzi:
W przypadku tcp po prostu sprawdzam
$?
. Jeśli połączenie się nie powiedzie,$?
nie będzie0
:bash
Uświadomienie sobie, że połączenie nie powiodło się, potrwa . Możesz użyć limitu czasu, aby uruchomićbash
:Testowanie portu udp jest bardziej złożone.
Ściśle mówiąc, nie ma stanu otwartego (oczywiście udp to protokół bezstanowy ) z udp. Są tylko dwa stany z udp, słuchanie lub nie . Jeśli stan nie jest , otrzymasz ICMP Miejsce docelowe nieosiągalne .
Niestety zapora lub router często upuszczają te pakiety ICMP, więc nie masz pewności, jaki jest stan portu udp.
źródło
Ogólnie nie możesz.
W przeciwieństwie do TCP, UDP jest bezpołączeniowy. Nie można wykryć, że port jest otwarty, po prostu nawiązując z nim połączenie typu „nic nie rób”, jak w przypadku TCP. Zamiast tego musisz wysłać dane do portu i zobaczyć, co się stanie, a szczegóły UDP zaimplementowane w świecie rzeczywistym utrudniają interpretację wyników. Nawet wyrafinowane narzędzia na poziomie pakietu, takie jak
nmap
nie są pewne, czy jakiś program nasłuchuje na danym porcie UDP.nmap
dzieli porty UDP na trzy grupy:nmap
po prostu nie wymyślił, jak uzyskać odpowiedź; być może użytkownik po prostu miał pecha i wszystkie pakiety zostały utracone podczas transportu.źródło
nmap
. Dzięki, to wyjaśnia wiele zamieszania.