check port open without telnet [geschlossen]

17

Was verwenden Benutzer, wenn Telnet nicht installiert ist, um zu überprüfen, ob ein Port offen und erreichbar ist? ZB habe ich die Technik von verwendet telnet <destination>und wusste, dass es da ist, auch wenn Telnet nicht mit dem System am anderen Ende interagieren konnte.

Mit Windows 2008 ist Telnet nicht installiert, daher bin ich etwas verloren gegangen. Also, was kann ich stattdessen verwenden. Und etwas, wenn es nicht in Linux oder Solaris ist, bitte auch.

Ich bin ein Berater, der an verschiedenen Standorten arbeitet. Aus einer Reihe von Gründen (Zugriffsrechte, Kontrollzeiten ändern, wenn ich es installiere, wird es nächstes Jahr von jemandem verwendet, wir haben eine gewisse Haftung usw.) kann ich nicht auf dem Server eines anderen installieren. Aber ein USB oder ein anderes eigenständiges, nicht installiertes Tool wäre wunderbar ...

Karl
quelle
3
Warum installierst du es nicht einfach?
Chris McKeown
Oder installiere so etwas wie nmap...
etagenklo
Versuchen Sie es mit nmap
Zeeshan

Antworten:

25

Benutze Powershell wie einen Boss


Basiscode

$ipaddress = "4.2.2.1"
$port = 53
$connection = New-Object System.Net.Sockets.TcpClient($ipaddress, $port)

if ($connection.Connected) {
    Write-Host "Success"
}
else {
    Write-Host "Failed"
}

Verwandeln Sie es in ein Cmdlet

[CmdletBinding()]
Param(
  [Parameter(Mandatory=$True,Position=1)]
   [string]$ip,

   [Parameter(Mandatory=$True,Position=2)]
   [int]$port
)

$connection = New-Object System.Net.Sockets.TcpClient($ip, $port)
if ($connection.Connected) {
    Return "Connection Success"
}
else {
    Return "Connection Failed"
}

Speichern Sie als Skript und verwenden Sie die ganze Zeit

Dann verwenden Sie den Befehl in Ihrer Powershell- oder Cmd-Eingabeaufforderung wie folgt:

PS C:\> telnet.ps1 -ip 8.8.8.8 -port 53

oder

PS C:\> telnet.ps1 8.8.8.8 53

Vasili Syrakis
quelle
4
Sie können auch einfach Folgendes ausführen: New-Object System.Net.Sockets.TcpClient ("IP oder DomainName", 80). Wenn keine Verbindung hergestellt werden kann, erhalten Sie eine Fehlermeldung oder Informationen zum erstellten Objekt, wenn die Verbindung erfolgreich hergestellt wurde.
Tsuushin
1
Wie funktioniert das beim Schließen der Steckdose? Ich weiß zum Beispiel, ob ich eine Webanforderung für IIS öffne, aber die Verbindung nicht schließe, sie wird ein Limit erreichen und ich kann nicht mehr testen.
Vasili Syrakis
Gute Frage. Ich stelle mir vor, es macht dasselbe wie in Ihrer Antwort (da Sie / wir nicht darüber verfügen oder die Steckdose manuell schließen); Der TcpClient sollte irgendwann Müll sammeln, sonst hat der Socket vorher ein Lese-Timeout. Nur eine Vermutung, habe es nicht getestet!
Tsuushin
1
Wenn Sie nicht befürchten möchten, dass der Socket eine Weile offen bleibt, können Sie dies tun: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Fehler, wenn Sie keine Verbindung herstellen können, der Fehler wird jedoch
ausgegeben
41

Es gibt verschiedene Möglichkeiten, einen TCP-Port ohne Telnet zu testen.

BASH ( Manpage )

# cat < /dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_5.3
^C

# cat < /dev/tcp/127.0.0.1/23
bash: connect: Connection refused
bash: /dev/tcp/127.0.0.1/23: Connection refused


cURL

# curl -v telnet://127.0.0.1:22
* About to connect() to 127.0.0.1 port 22 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 22 (#0)
SSH-2.0-OpenSSH_5.3
^C

# curl -v telnet://127.0.0.1:23
* About to connect() to 127.0.0.1 port 23 (#0)
*   Trying 127.0.0.1... Connection refused
* couldn't connect to host
* Closing connection #0
curl: (7) couldn't connect to host


Python

# python
Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> clientsocket.connect(('127.0.0.1', 22))
>>> clientsocket.send('\n')
1
>>> clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> clientsocket.connect(('127.0.0.1', 23))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in connect
socket.error: [Errno 111] Connection refused


Perl

# perl
use IO::Socket::INET;
$| = 1;
my $socket = new IO::Socket::INET(
  PeerHost => '127.0.0.1',
  PeerPort => '22',
  Proto => 'tcp',
);
die "cannot connect to the server $!\n" unless $socket;
print "connected to the server\n";
^D
connected to the server
Skohrs
quelle
+1 War mir der Curl-Methode nicht bewusst, sehr cool! :)
Blong