Polecenia natywne dla Windows do monitorowania zdalnego portu pod kątem dostępności usługi

0

Podobne pytanie: Jak sprawdzić, czy usługa Pulpit zdalny jest uruchomiona i dostępna?

Szukałem odpowiedzi na problem „Jak pingować określony port?” i znalazłem kilka rozwiązań. Nawet przed przeszukiwaniem zdawałem sobie sprawę, że „ping” nie jest nawet zdalnym narzędziem do pracy, ale jest najbliższym narzędziem pod względem funkcjonalności do tego, co chcę zrobić.

Większość rozwiązań problemu „pinguj port” opiera się na nmapie lub innych nie-rodzimych narzędziach i generalnie są one tak napisane, że są użyteczne tylko do jednorazowego sprawdzenia. Chcę stale monitorować port na zdalnym hoście, aby móc być powiadamiany o dostępności usługi na tym porcie. Podobnie jak w przypadku powyższego pytania, najczęstszym przypadkiem użycia, jaki mam w tym przypadku, jest sprawdzenie dostępności komputera w poszukiwaniu RDP po ponownym uruchomieniu komputera (samo ping nie jest wiarygodnym wskaźnikiem tego, czy system zakończył uruchamianie i uruchamianie wszystkich usług).

Kluczową różnicą jest to, że chcę to zrobić za pomocą narzędzi, które są rodzime dla systemu Windows. Nigdy nie wiem, kiedy i gdzie będzie, że będę chciał monitorować zdalny system pod kątem dostępności usług, a nie zawsze moje przenośne narzędzia są poręczne, kiedy to się dzieje, więc byłoby idealnie, gdyby istniało stosunkowo prosty, jednopłaszczyznowy przy użyciu wbudowanych narzędzi CMD lub PowerShell, które mogą wykonać zadanie.

Mam kilka systemów z Windows 8 lub Server 2012 i PowerShell 4.0, ale rozwiązania, które są kompatybilne wstecz z Windows 7 i Server 2008, z PowerShell 2.0, byłyby idealne. (Uwaga: wersje PowerShell są podane tylko w celach informacyjnych - każda komenda lub krótki skrypt, który będzie działał na świeżej instalacji danych wersji systemu Windows, bez potrzeby dodatkowego oprogramowania, zrobi to.

Iszi
źródło

Odpowiedzi:

0

Jeśli zamierzasz wykonać test interaktywnie, możesz użyć klienta TELNET, wpisując „port hosta telnet”, na przykład „telnet 10.23.43.12 80”, aby uzyskać dostęp do portu HTTP.

Pamiętaj, że klient telnet nie jest instalowany domyślnie od Windows 7 / Windows 2008, więc musisz aktywować narzędzie w panelu sterowania - & gt; Dodaj / usuń oprogramowanie - & gt; Składniki systemu Windows.

user3767013
źródło
To jest to, co nazywam narzędziami, które są przydatne tylko do jednorazowego sprawdzenia. Szukam rozwiązania typu „zapomnij i zapomnij” - coś, co będzie działało nieprzerwanie i będzie regularnie aktualizować mnie o statusie portu lub po prostu powiadomić mnie, kiedy w końcu powróci.
Iszi
0

W Windows 8 możesz użyć Test-NetConnection uzyskać podobną funkcjonalność do klasyki ping i tracert narzędzia, a także sprawdzić stan portu systemu zdalnego. Niestety, opcje dla Test-NetConnection są stosunkowo ograniczone w porównaniu z narzędziami, które zastępują. Tak więc, to samo nie będzie dobrze służyć do ciągłego monitorowania. Na szczęście PowerShell jest bardzo skryptowalny. Oto jeden liner (technicznie kilka linii skondensowanych do jednej), który będzie nieustannie testować dostępność portu i drukować na konsoli wyniki oznaczone czasem.

cls;1..8|%{""};for(){$x=tnc 192.168.0.1 -Po 80;"$(Get-Date) $($x.TcpTestSucceeded)"}

Oto zrzut ekranu skryptu w akcji. Możesz zobaczyć tutaj, dlaczego zacząłem skrypt cls;1..8|%{""}; nawet jeśli to technicznie nie jest potrzebne. Ponadto możesz to zobaczyć Test-NetConnection uruchomienie za każdym razem zajmuje około 9-10 sekund, nawet gdy jesteś w sieci LAN.

enter image description here

Oto skomentowana, wieloliniowa wersja skryptu. To ten sam kod, po prostu rozłożony wraz z instrukcją.

# CLS is a built-in alias for Clear-Host.
# This clears any pre-existing output from the console so we can start ours from the top.

cls;

# This takes the integers from 1 through 8 and pipes them to a ForEach-Object loop.
# (The percent symbol, "%", is a built-in alias for ForEach-Object.)
# Putting just a pair of double-quotes in the script block outputs a single blank line.
# Effectively, this line of script just outputs 8 blank lines.
# While Test-NetConnection runs, it puts a status display on the top 8 lines of the console.
# So, we're using this to make our output start below that level in order to be visible.

1..8|%{""};

# This begins an infinite for loop. It will run until aborted by the user.
# (e.g.: With CTRL+C)
# Note: Due to the way Test-NetConnection operates, the abort may take a few seconds to process.

for(){

    # TNC is a built-in alias for Test-NetConnection.
    # -Po is a shorthand for the -Port parameter name.
    # PowerShell allows shortening of parameter names down to as few characters are needed to uniquely identify the parameter.
    # This tests for connectivity to port 80 at 192.168.0.1 and puts the results in $x.

    $x=tnc 192.168.0.1 -Po 80;

    # The last step here is to output a timestamp, and the results.
    # Double-quotes allow for per-processing certain elements before including them in an output string.
    # Encapsulating script blocks with $(), within the double-quotes, lets us put their results directly in the output string.
    # So, the first part gets the date and time for the start of the output.
    # Then, with a space to separate it, the TcpTestSucceeded property of $x is retrieved and put at the end.

    "$(Get-Date) $($x.TcpTestSucceeded)"
    }

Nie jest tak czysty i prosty, jak bym chciał, ale to działa. Zdecydowanie nie zapamiętuję go w najbliższym czasie, ale gdy zrozumiesz komendy i podstawy PowerShell, które sprawiają, że działa, to jest to stosunkowo łatwo przebudować w locie.

Dla czegoś nieco prostszego, który po prostu sprawdza port i zatrzymuje się, aby poinformować Cię, kiedy jest już gotowy, możesz użyć tego:

while((tnc 192.168.0.1 -Po 80).TcpTestSucceeded -eq $False){};Get-Date

W tym przypadku używamy pętli while, aby kontynuować testowanie portu tak długo, jak jest wyłączony. Po pomyślnym nawiązaniu połączenia z portem pętla while kończy działanie, a Get-Date zgłosi czas. Zobaczysz również komunikaty ostrzegawcze z Test-NetConnection tak długo, jak działa pętla - dzieje się tak, ponieważ wykorzystuje kanał wyjściowy Ostrzeżenie do raportowania, gdy połączenie ping lub port nie powiedzie się, zanim faktycznie wyśle ​​pełne wyniki jako normalne wyjście.

Niestety, Test-NetConnection nie jest dostępny w systemach, w których działa mniej niż Windows 8. Tak więc brakuje również kompatybilności, na którą liczyłem. Mimo to jest to lepsze niż nic na razie.

Iszi
źródło