sprawdź port otwarty bez telnet [zamknięty]

17

Czego ludzie używają, gdy Telnet nie jest zainstalowany, aby sprawdzić, czy port jest otwarty i dostępny? Np. Korzystałem z techniki telnet <destination>i wiedziałem, że tam była, nawet jeśli telnet nie mógł wchodzić w interakcje z systemem na drugim końcu.

W systemie Windows 2008 telnet nie jest zainstalowany, więc byłem trochę zagubiony. Czego więc mogę użyć zamiast tego. I coś, jeśli nie ma go również w systemie Linux lub Solaris, proszę.

Jestem konsultantem, który pracuje na różnych stronach. Z wielu powodów (prawa dostępu, zmiana czasów kontroli, jeśli go zainstaluję, ktoś z niego skorzysta w przyszłym roku, ponosimy odpowiedzialność itp.) Nie mogę zainstalować na cudzym serwerze. Ale USB lub inne samodzielne, niezainstalowane narzędzie byłoby cudowne ...

Karl
źródło
3
Dlaczego po prostu go nie zainstalujesz?
Chris McKeown,
Lub zainstaluj coś w stylu nmap...
etagenklo
Spróbuj użyć nmap
Zeeshan

Odpowiedzi:

25

Używaj Powershell jak boss


Kod podstawowy

$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"
}

Zmień go w polecenie 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"
}

Zapisz jako skrypt i używaj cały czas

Następnie użyj polecenia w wierszu polecenia PowerShell lub cmd w następujący sposób:

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

lub

PS C:\> telnet.ps1 8.8.8.8 53

Wasilij Syrakis
źródło
4
Możesz także po prostu wykonać: New-Object System.Net.Sockets.TcpClient („IP lub DomainName”, 80) I pojawi się błąd, jeśli nie będzie mógł się połączyć, lub informacja o utworzonym obiekcie, jeśli połączenie się powiedzie.
Tsuushin,
1
Jak to działa pod względem zamykania gniazda? Na przykład wiem, że jeśli otworzę żądanie internetowe do IIS, ale nie zamykam połączenia, osiągnie limit i nie będę mógł więcej testować.
Wasilij Syrakis,
Dobre pytanie. Wyobrażam sobie, że robi to samo, co w twojej odpowiedzi (ponieważ ty / my nie pozbywamy się go ani nie zamykamy gniazda ręcznie); TcpClient powinien w pewnym momencie otrzymać śmieci, w przeciwnym razie gniazdo przekroczy limit czasu odczytu. Tylko zgadnij, nie przetestowałem tego!
Tsuushin
1
Jeśli nie chcesz się martwić pozostawieniem gniazda otwartego przez chwilę, możesz to zrobić: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Zamknij Ta sama oferta jak poprzednio; Błąd, jeśli nie możesz się połączyć, ale wydrukuje to, jeśli się podłączy, a następnie pomyślnie zamknie port: void Close ()
Tsuushin
41

Oto kilka różnych sposobów testowania portu TCP bez usługi Telnet.

BASH ( strona podręcznika )

# 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


kędzior

# 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


Pyton

# 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
źródło
+1 Nie byłem świadomy metody zwijania się, bardzo fajnie! :)
blong