Przetestuj połączenie z portem bez faktycznego połączenia z nim

0

Mam gdzieś uruchomiony serwer gniazd Pythona (jednowątkowy, akceptuje tylko jedno połączenie).

Łączę się z tym portem i robię swoje rzeczy.

Jak mogę wykryć, czy port jest otwarty czy zamknięty bez nawiązywania połączenia? To znaczy, nie chcę zamykać portu, aby zobaczyć, czy jest otwarty, czy nie :-)

Próbowałem już, nc -zvv ip portale to zamyka skrypt (ponieważ faktycznie łączy się z portem).

vfsoraki
źródło
Zmodyfikuj skrypt, aby nie wychodził po zamknięciu połączenia.
gronostaj
Więc nie ma innej drogi? Czy to zachowanie występuje również podczas używania skanera portów takiego jak nmap?
vfsoraki

Odpowiedzi:

1

Użyj narzędzia do skanowania portów, takiego jak nmap. Po uruchomieniu z wystarczającymi uprawnieniami (w Linuksie konieczne jest uprawnienie cap_net_raw, „root” w innych systemach uniksowych) narzędzie ma kilka trybów skanowania, które nie wymagają ukończenia uzgadniania TCP.

Domyślny tryb skanowania, gdy jest uprzywilejowany, to „skanowanie TCP SYN” ( -sSopcja), który próbuje uruchomić uzgadnianie TCP, ale natychmiast go resetuje. W ten sposób program nie jest informowany o próbie połączenia, ponieważ nie było żadnego połączenia.

Aby przeskanować określone porty, dodaj -p <ports>opcję.

$ sudo nmap --reason -sS -p 22,53,79,80 localhost
PORT    STATE  SERVICE REASON
22/tcp  open   ssh     syn-ack
79/tcp  open   finger  syn-ack
143/tcp closed imap    reset
443/tcp closed https   reset
grawitacja
źródło