verifique a porta aberta sem telnet [fechado]

17

O que as pessoas usam quando o Telnet não está instalado para verificar se uma porta está aberta e acessível? Por exemplo, eu costumava usar a técnica de telnet <destination>e sabia que ela estava lá, mesmo que o telnet não pudesse interagir com o sistema do outro lado.

Com o Windows 2008, o telnet não está instalado, por isso fiquei um pouco perdido. Então, o que eu posso usar? E algo se não estiver lá no Linux ou Solaris, também, por favor.

Eu sou um consultor que trabalha em sites diferentes. Por várias razões (direitos de acesso, tempos de controle de alteração, se eu o instalar, alguém o usará no próximo ano, temos alguma responsabilidade, etc.) não consigo instalar no servidor de outra pessoa. Mas um USB ou outra ferramenta independente e não instalada seria maravilhosa ...

Karl
fonte
3
Por que você não instala?
Chris McKeown
Ou instalar algo como nmap...
etagenklo
Tente usar o nmap
Zeeshan

Respostas:

25

Use o PowerShell como um chefe


Código básico

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

Transforme-o em um 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"
}

Salvar como um script e usar o tempo todo

Em seguida, você usa o comando no prompt do powershell ou cmd da seguinte maneira:

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

ou

PS C:\> telnet.ps1 8.8.8.8 53

Vasili Syrakis
fonte
4
Você também pode simplesmente executar: New-Object System.Net.Sockets.TcpClient ("IP or DomainName", 80) E você receberá um erro se ele não conseguir se conectar ou informações sobre o objeto criado se a conexão for bem-sucedida.
Tsuushin
11
Como isso funciona em termos de fechamento do soquete? Por exemplo, eu sei se eu abrir uma solicitação da Web para o IIS, mas não fechar a conexão, ela atingirá um limite e não poderei mais testar.
Vasili Syrakis
Boa pergunta. Eu imagino que ele faça o mesmo que em sua resposta (já que você / nós não descartamos ou fechamos o soquete manualmente); O TcpClient deve receber o lixo coletado em algum momento ou o soquete atingirá um tempo limite de leitura antes disso. Apenas um palpite, não testei!
Tsuushin
11
Se você não quiser se preocupar em deixar o soquete aberto por um tempo, faça o seguinte: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Fechar A mesma transação de antes; Erro se você não conseguir se conectar, mas ele imprimirá isso se estiver conectado e fechou a porta com êxito: void Close ()
Tsuushin
41

Aqui estão várias maneiras diferentes de testar uma porta TCP sem 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


ondulação

# 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ão

# 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
fonte
+1 Não conhecia o método de ondulação, muito legal! :)
BLONG