vérifier le port ouvert sans telnet [fermé]

17

Qu'est-ce que les gens utilisent lorsque Telnet n'est pas installé pour vérifier qu'un port est ouvert et accessible? Par exemple, j'utilisais la technique de telnet <destination>et je savais qu'elle était là, même si telnet ne pouvait pas interagir avec le système à l'autre bout.

Avec Windows 2008, telnet n'est pas installé, donc je suis un peu perdu. Alors, que puis-je utiliser à la place. Et quelque chose s'il n'est pas là sous Linux ou Solaris, s'il vous plaît aussi.

Je suis consultant et travaille sur différents sites. Pour un certain nombre de raisons (droits d'accès, horaires de contrôle des modifications, si je l'installe, quelqu'un l'utilisera l'année prochaine, nous avons une certaine responsabilité, etc.) Je ne peux pas installer sur le serveur de quelqu'un d'autre. Mais un USB ou un autre outil autonome non installé serait merveilleux ...

Karl
la source
3
Pourquoi ne l'installez-vous pas?
Chris McKeown
Ou installez quelque chose comme nmap...
etagenklo
Essayez d'utiliser nmap
Zeeshan

Réponses:

25

Utilisez Powershell comme un boss


Code de base

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

Transformez-le en applet de commande

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

Enregistrer en tant que script et utiliser tout le temps

Ensuite, vous utilisez la commande dans votre invite powershell ou cmd comme suit:

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

ou

PS C:\> telnet.ps1 8.8.8.8 53

Vasili Syrakis
la source
4
Vous pouvez également simplement exécuter: New-Object System.Net.Sockets.TcpClient ("IP ou DomainName", 80) Et vous obtiendrez une erreur s'il ne peut pas se connecter, ou des informations sur l'objet créé si la connexion a réussi.
Tsuushin
1
Comment cela fonctionne-t-il en termes de fermeture du socket? Par exemple, je sais que si j'ouvre une requête Web à IIS, mais ne ferme pas la connexion, elle atteindra une limite et je ne pourrai plus tester.
Vasili Syrakis
Bonne question. J'imagine que cela fait la même chose que dans votre réponse (puisque vous / nous ne nous en débarrassons pas ou ne fermons pas la prise manuellement); Le TcpClient devrait récupérer les ordures à un moment donné, ou le socket atteindra un délai de lecture avant cela. Juste une supposition, je ne l'ai pas testé!
Tsuushin
1
Si vous ne voulez pas vous inquiéter de laisser le socket ouvert pendant un certain temps, vous pouvez le faire: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Close Même accord qu'auparavant; Erreur si vous ne pouvez pas vous connecter, mais il l'imprimera s'il s'est connecté, puis a fermé le port avec succès: void Close ()
Tsuushin
41

Voici plusieurs façons de tester un port TCP sans telnet.

BASH ( page de manuel )

# 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


boucle

# 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
la source
+1 Ne connaissait pas la méthode curl, très cool! :)
blong