проверить порт открытым без telnet [закрыт]

17

Что люди используют, когда Telnet не установлен, чтобы проверить, открыт ли порт и доступен ли он? Например, я использовал технику telnet <destination>и знаю, что она была там, даже если telnet не мог взаимодействовать с системой на другом конце.

В Windows 2008 telnet не установлен, поэтому я немного растерялся. Так что я могу использовать вместо этого. И что-то, если его нет в Linux или Solaris, тоже, пожалуйста.

Я консультант, который работает на разных сайтах. По ряду причин (права доступа, время изменения изменений, если я установлю его, кто-то использует его в следующем году, у нас есть некоторая ответственность и т. Д.), Я не могу установить на чужой сервер. Но USB или другой автономный, не установленный инструмент был бы замечательным ...

Карл
источник
3
Почему бы вам просто не установить его?
Крис МакКаун
Или установить что-то вроде nmap...
etagenklo
Попробуйте использовать птар
Zeeshan

Ответы:

25

Используйте Powershell как босс


Основной код

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

Превратите это в командлет

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

Сохранить как скрипт и использовать все время

Затем вы используете команду в командной строке powershell или cmd следующим образом:

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

или

PS C:\> telnet.ps1 8.8.8.8 53

Василий Сиракис
источник
4
Вы также можете просто выполнить: New-Object System.Net.Sockets.TcpClient («IP or DomainName», 80), и вы получите сообщение об ошибке, если он не может подключиться, или информацию о созданном объекте, если подключение установилось успешно.
Цуушин
1
Как это работает с точки зрения закрытия сокета? Например, я знаю, открываю ли я веб-запрос к IIS, но не закрываю соединение, оно достигнет предела, и я больше не смогу тестировать.
Василий Сиракис
Хороший вопрос. Я предполагаю, что он делает то же самое, что и в вашем ответе (поскольку вы / мы не избавляемся от него или не закрываем сокет вручную); В какой-то момент TcpClient должен получить мусор, иначе сокет истечет время ожидания до этого. Просто предположение, еще не проверял!
Цуушин
1
Если вы не хотите беспокоиться о том, чтобы оставить сокет открытым некоторое время, вы можете сделать это: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Закрыть Та же сделка, что и раньше; Ошибка, если вы не можете подключиться, но она распечатает это, если подключится, а затем успешно закроет порт: void Close ()
Tsuushin
41

Вот несколько способов протестировать порт TCP без Telnet.

BASH ( справочная страница )

# 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 -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 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
источник
+1 Не знал о методе локона, очень круто! :)
blong