Próbuję przetestować, czy mogę dostać się do określonego portu na zdalnym serwerze (do którego mam dostęp) za pośrednictwem UDP.
Oba serwery są połączone z Internetem. Korzystam z netcata, aby pewien port nasłuchiwał.
Następnie używam nmap, aby sprawdzić, czy ten port jest otwarty, ale wydaje się, że nie jest.
Iptables jest wyłączone.
Wszelkie sugestie, dlaczego tak może być? W końcu zamierzam skonfigurować tunel VPN, ale ponieważ jestem nowy w tunelach, chcę się upewnić, że mam połączenie z portem UDP 1194, zanim przejdę dalej.
centos
udp
networking
Zamek
źródło
źródło
Odpowiedzi:
Nie ma czegoś takiego jak „otwarty” port UDP, przynajmniej nie w tym sensie, że większość ludzi jest przyzwyczajona do myślenia (co odpowiada na pytanie „OK, zaakceptowałem twoje połączenie”). UDP nie wymaga sesji, więc „port” (czytaj: protokół UDP w stosie IP systemu operacyjnego) nigdy nie odpowie sam na „sukces”.
Porty UDP mają tylko dwa stany: nasłuchuje lub nie. To zwykle tłumaczy się jako „otwarcie gniazda przez proces” lub „brak otwarcia gniazda”. Ten drugi przypadek powinien być łatwy do wykrycia, ponieważ system powinien odpowiedzieć pakietem ICMP Destination Unreachable o kodzie = 3 (Port nieosiągalny). Niestety wiele zapór ogniowych może upuścić te pakiety, więc jeśli nic nie otrzymasz, nie wiesz na pewno, czy port jest w tym stanie, czy nie. I nie zapominajmy, że ICMP również nie wymaga sesji i nie wykonuje retransmisji: pakiet Port Unreachable może równie dobrze zostać zgubiony gdzieś w sieci.
Port UDP w stanie „nasłuchiwania” może w ogóle nie odpowiadać (proces nasłuchujący po prostu odbiera pakiet i niczego nie przesyła) lub może odesłać coś z powrotem (jeśli proces zadziała po odebraniu i jeśli zadziała odpowiadanie przez UDP na pierwotny adres IP nadawcy:). Więc znowu, nigdy nie wiesz na pewno, jaki jest stan, jeśli niczego nie odzyskasz.
Mówisz, że możesz mieć kontrolę nad hostem odbierającym: dzięki temu możesz zbudować własny protokół, aby sprawdzić osiągalność portu UDP: po prostu umieść proces na hoście odbierającym, który będzie nasłuchiwał na danym porcie UDP i odpowie ci (lub odeśle e-mail lub po prostu wariujesz i
unlink()
wszystko w systemie plików hosta ... zrobi wszystko, co przyciągnie twoją uwagę).źródło
Aby sprawdzić, czy port udp odpowiada, użyj
netcat
.Przykład ze strony man :
Oczywiście, jeśli zapora sieciowa jest uruchomiona
DROP
, co zwykle ma miejsce w przypadku bram internetowych, nie otrzymasz odpowiedzi ICMP.źródło
yum install nc
(dla centos)nc -ul 6111
nc -u <server> 6111
Uwaga: Po uruchomieniu
nc -ul
polecenia na serwerze, połączenie zostanie nawiązane tylko dla pierwszego połączenia do niego przychodzącego. Jak się dowiedziałem, nie można przełączać się między serwerami pingującymi go bez zatrzymywania i ponownego uruchamianianc -ul
. W rzeczywistości, jeśli ^ C zatrzymasz klienta (nc -u ...
), nie będziesz mógł zrestartować klienta bez uprzedniego zrestartowania nasłuchiwania serwera.źródło
Testowanie otwartych portów UDP za pomocą nmap jest pełne niebezpieczeństw - nie ma trójstronnego uzgadniania wskazującego na otwartość. O ile proces nasłuchiwania nie zareaguje na cokolwiek, co wysyła nmap, nmap nie ma możliwości rozróżnienia między otwartym portem, który nie odpowiada, a portem filtrowanym.
Znacznie łatwiej jest po prostu nasłuchiwać na jednym końcu za pomocą netcata i używać netcata na drugim końcu, aby wysyłać pakiety i widzieć, że docierają na drugim końcu. Zrób to na dwa sposoby, po prostu bądź pewien. Możesz także
tcpdump
zobaczyć, jak pakiety docierają tam, gdzie muszą jechać.źródło
Miałem podobny problem i znalazłem dobre rozwiązanie za pomocą netcat tutaj: http://en.wikipedia.org/wiki/Netcat#Test_if_UDP_port_is_open:_simple_UDP_server_and_client
nc -vzu <host> <port>
Byłem w stanie potwierdzić, że mój port UDP jest otwarty, a następnie mogłem przystąpić do testowania mojego rzeczywistego kodu.
źródło
Możesz skanować porty udp za pomocą następującego polecenia
źródło
Możesz to zrobić za pomocą
netcat
(nc) lubiperf
, zakładając, że masz inną maszynę do testowania poza siecią. Moim wyborem byłobynmap
skanowanie UDP z systemu spoza twojego środowiska. Jaka była twoja linia poleceń nmap? Czy w miksie są jakieś sprzętowe zapory ogniowe lub inne urządzenia?źródło
Mam proste podejście. Jeśli serwer UDP nie zwróci oczekiwanych danych, po prostu przestaję zbierać dgramy, zakładając, że spadł:
źródło