comprobar puerto abierto sin telnet [cerrado]

17

¿Qué usan las personas cuando Telnet no está instalado para verificar que un puerto esté abierto y accesible? Por ejemplo, solía usar la técnica de telnet <destination>y sé que estaba allí, incluso si telnet no podía interactuar con el sistema en el otro extremo.

Con Windows 2008, Telnet no está instalado, así que me he perdido un poco. Entonces, ¿qué puedo usar en su lugar? Y algo si no está allí en Linux o Solaris, también, por favor.

Soy un consultor que trabaja en diferentes sitios. Por varias razones (derechos de acceso, tiempos de control de cambio, si lo instalo alguien lo usa el próximo año, tenemos alguna responsabilidad, etc.) No puedo instalarlo en el servidor de otra persona. Pero un USB u otra herramienta autónoma no instalada sería maravilloso ...

Karl
fuente
3
¿Por qué no lo instalas?
Chris McKeown
O instale algo como nmap...
etagenklo
Intente usar nmap
Zeeshan

Respuestas:

25

Usa Powershell como un jefe


Codigo basico

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

Convertirlo en un 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"
}

Guardar como script y usar todo el tiempo

Luego, usa el comando en tu solicitud de PowerShell o cmd de esta manera:

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

o

PS C:\> telnet.ps1 8.8.8.8 53

Vasili Syrakis
fuente
44
También puede simplemente ejecutar: New-Object System.Net.Sockets.TcpClient ("IP o DomainName", 80) Y obtendrá un error si no puede conectarse, o información sobre el objeto creado si la conexión se realizó correctamente.
Tsuushin
1
¿Cómo funciona eso en términos de cerrar el zócalo? Por ejemplo, sé que si abro una webrequest en IIS, pero no cierro la conexión, llegará a un límite y no podré probar más.
Vasili Syrakis
Buena pregunta. Me imagino que hace lo mismo que en su respuesta (ya que usted / nosotros no lo desechamos ni cerramos el zócalo manualmente); El TcpClient debería recolectar basura en algún momento, o el socket alcanzará un tiempo de espera de lectura antes de eso. Solo una suposición, ¡no lo he probado!
Tsuushin
1
Si no quiere preocuparse por dejar el socket abierto por un tiempo, puede hacer esto: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Cerrar El mismo trato que antes; Error si no puede conectarse, pero imprimirá esto si se conectó y luego cerró el puerto con éxito: vacío Cerrar ()
Tsuushin
41

Aquí hay varias formas diferentes de probar un puerto TCP sin telnet.

BASH ( página de manual )

# 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


rizo

# 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


Pitón

# 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
fuente
+1 No conocía el método de rizo, ¡genial! :)
blong el