Jak ustalić, czy port jest otwarty na serwerze Windows? [Zamknięte]

478

Próbuję zainstalować witrynę pod alternatywnym portem na serwerze, ale port może być zamknięty przez zaporę ogniową. Czy istnieje sposób pingowania lub wejścia na określonym porcie, aby sprawdzić, czy jest on otwarty?

Jason
źródło

Odpowiedzi:

732

Zakładając, że próbujesz użyć portu TCP (zamiast UDP):

  1. Na samym serwerze użyj, netstat -anaby sprawdzić, które porty nasłuchują.

  2. Z zewnątrz po prostu użyj telnet host port(lub telnet host:portw systemach Unix), aby sprawdzić, czy połączenie zostało odrzucone, zaakceptowane, czy upłynęły limity czasu.

W tym ostatnim teście, ogólnie:

  • odmowa połączenia oznacza, że ​​nic nie działa na tym porcie
  • Akceptowane oznacza, że ​​coś działa na tym porcie
  • Limit czasu oznacza, że ​​zapora blokuje dostęp

W systemie Windows 7 lub Windows Vista domyślna opcja „telnet” nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy. Aby rozwiązać ten problem, po prostu włącz go: Kliknij * Start ** → Panel sterowaniaProgramyWłącz lub wyłącz Funkcje systemu Windows . Na liście przewiń w dół, wybierz Klient Telnet i kliknij OK.

Alnitak
źródło
312
W wersji domyślnej Win7 lub Vista opcja „telnet” nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy. Aby rozwiązać ten problem, po prostu włącz go: Kliknij przycisk Start, Panel sterowania, Programy, a następnie Włącz lub wyłącz Funkcje systemu Windows. Na liście przewiń w dół i wybierz Klient Telnet i kliknij OK
volody
12
@PankajKohli zamiast tego użyj klienta telnet PuTTy . Nie trzeba go instalować.
Colin Pickard
52
Co to Could not open connection to the host, on port *x*: Connect failedoznacza?
Kenny Evitt
2
@Alnitak Chciałem tylko sprawdzić, ponieważ myślę, że to już odpowiada na moje pytanie. Kiedy telnet api-3t.sandbox.paypal.com 443dostaję Connecting to api-3t.sandbox.paypal.com...Could not open connection to the host on port 443: Connect failedCzy to dlatego, że zapora go blokuje?
Popeye
2
istnieje różnica jeśli otwarte Telnet.exe a następnie wpisz o host portvs linii poleceń (cmd.exe) otwartego i wpisztelnet host port
Paweł Cioch
185

W systemie Windows możesz użyć

netstat -na | find "your_port"

zawęzić wyniki. Można również filtrować LISTENING, ESTABLISHED, TCPi takie. Pamiętaj, że wielkość liter ma znaczenie.

J.Celmer
źródło
4
nie możesz znaleźć w ten sposób, będzie szukał plików, powinieneś użyć grep
Moataz Elmasry 17.09.13
38
@MoatazElmasry, to prawda w systemie Linux, ale dzieje się tak na serwerze Windows, gdzie polecenie find jest poprawnym poleceniem. Grep nie jest dostępny w systemie Windows. Właśnie uruchomiłem dokładnie wspomniane polecenie i zadziałało idealnie.
Ben Wyatt
4
Kiedy użyłem tego polecenia, tj. Netstat -an | znaleźć „19345”, nie otrzymałem żadnego wyniku. co to znaczy?
nanosoft
14
findnie działa w systemie Windows 10 dla mnie, ale netstat -na | findstr "8080"pracował
Arun
6
nic się nie dzieje, nie z find ani findstr
przydatneBee
83

Jeśli sprawdzasz z zewnątrz, a nie z samego serwera i nie chcesz zawracać sobie głowy instalowaniem telnetu (ponieważ nie jest on dostarczany z ostatnimi wersjami systemu Windows) lub jakiegokolwiek innego oprogramowania, masz natywną wersję programu PowerShell:

Test-NetConnection -Port 800 -ComputerName 192.168.0.1 -InformationLevel Detailed

(Niestety działa to tylko z PowerShell 4.0 lub nowszym. Aby sprawdzić wersję PowerShell, wpisz $PSVersionTable.)

PS: Zauważ, że w dzisiejszych czasach istnieją twitterowe sfery, które sugerują, że tę odpowiedź można poprawić, wspominając „Test-Connection” z PowerShell Core lub skrót „tnc”. Zobacz https://twitter.com/david_obrien/status/1214082339203993600 i pomóż mi edytować tę odpowiedź, aby ją poprawić, proszę!


(Jeśli masz PSVersion <4.0, nie masz szczęścia. Sprawdź tę tabelę:

Wpisz opis zdjęcia tutaj

Mimo że możesz uaktualnić swoją wersję PowerShell, instalując system Windows Management Framework 4.0 , nie udało mi się to, cmdlet Test-NetConnection jest nadal niedostępny).

knocte
źródło
3
To najlepsza odpowiedź. Instalacja telnetu nie zawsze jest prosta na serwerach innych osób!
TrojanName
Zdecydowanie musi być najlepszą odpowiedzią.
QtRoS,
1
Jest to bardziej niezawodna opcja niż telnet, telnet po prostu zawiesił się, nie zgłaszając niczego, podczas gdy to informuje, że port jest dostępny w moim przypadku.
axk
42

Na komputerze z systemem Windows możesz użyć PortQry firmy Microsoft, aby sprawdzić, czy aplikacja nasłuchuje na określonym porcie za pomocą następującego polecenia:

portqry -n 11.22.33.44 -p tcp -e 80
Gunjan Moghe
źródło
4
Porty zapory ogniowej są zazwyczaj wyświetlane jako „FILTROWANE”.
dlanod
Możesz także użyć tego narzędzia, aby sprawdzić port UDP:portqry -n 11.22.33.44 -p udp -e 19132
Antony
41

Podobało mi się to:

netstat -an | find "8080" 

z telnetu

telnet 192.168.100.132 8080

I tylko upewnij się, że zapora jest wyłączona na tym komputerze.

Sarvar Nishonboev
źródło
Kiedy użyłem tego polecenia, tj. Netstat -an | znaleźć „19345”, nie otrzymałem żadnego wyniku. co to znaczy? -
nanosoft
2
oznacza to, że ten port jest bezpłatny
Sarvar Nishonboev
Gdy uruchamiam netstat -an | find "8080", no such file named "8080"
pojawia
24

Jeśli telnetnie jest dostępny, pobierz PuTTY . Jest znacznie lepszym klientem Telnet, SSH itp. I będzie przydatny w wielu sytuacjach, nie tylko w tym, szczególnie jeśli administrujesz serwerem.

Machtyn
źródło
Tak, ale nie do wklejania kodu Forth, powiedzmy, w AmForth (chyba że używasz PuTTY w połączeniu z Edit Overflow ).
Peter Mortensen,
13

Czy potrzebujesz narzędzia do tego? Istnieje strona internetowa pod adresem http://www.canyouseeme.org/ . W przeciwnym razie potrzebujesz innego serwera, aby oddzwonić, aby sprawdzić, czy port jest otwarty ...

Douglas Mayle
źródło
12

Użyj tego, jeśli chcesz zobaczyć wszystkie używane i nasłuchujące porty na serwerze Windows:

netstat -an |find /i "listening"

Zobacz wszystkie otwarte, nasłuchujące, ustanowione porty:

netstat -a
zehnaseeb
źródło
7

W systemie Windows Server możesz używać

netstat -an | where{$_.Contains("Yourport")}
Derbium
źródło
W żaden sposób nie rozwiązuje problemu zapory.
Markiz Lorne
5
Działa to w PowerShell
Paco Zarate
Czy masz na myśli „serwer Windows”?
Peter Mortensen,
4

Inną opcją jest tcping .

Na przykład:

tcping host port

Wadzim
źródło
4

PsPing z Sysinternals jest również bardzo dobry.

Peter Mortensen
źródło
Dobre narzędzie Przykładowy kod to: PsPing -n 20 -i 0 nazwa serwera: port
Asher
1

Oto, co zadziałało dla mnie:

  • Otwórz wiersz polecenia
  • Rodzaj telnet
  • Microsoft Telnet> otwórz <nazwa hosta lub adres IP> <spacja> <port>

Potwierdzi to, czy port jest otwarty.

p_champ
źródło