відкритий порт без telnet [закритий]


17

Що використовують люди, коли Telnet не встановлений, щоб перевірити, чи порт відкритий і доступний? Наприклад, я використовував техніку telnet <destination>і знаю, що вона там була, навіть якщо telnet не міг взаємодіяти з системою з іншого боку.

З Windows 2008 telnet не встановлений, тому я трохи загубився. Отже, що я можу використовувати замість цього. І щось, якщо його немає в Linux або Solaris, теж будь ласка.

Я консультант, який працює на різних сайтах. З ряду причин (права доступу, зміни часу контролю; якщо я встановлю його хтось використовує, то наступного року ми маємо певну відповідальність тощо), я не можу встановити на чужий сервер. Але USB або інший автономний, не встановлений інструмент був би чудовим ...


3
Чому ви просто не встановите його?
Кріс МакКаун

Або встановіть щось на кшталт nmap...
etagenklo

Спробуйте скористатися nmap
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"
}

Перетворіть його в 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"
}

Збережіть як сценарій і використовуйте весь час

Тоді ви використовуєте команду у вікні повноважень або 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 або DomainName", 80). Ви отримаєте помилку, якщо він не може підключитися, або інформацію про створений об'єкт, якщо з'єднання вдалося.
Цуушин

1
Як це працює в плані закриття розетки? Наприклад, я знаю, якщо я відкрию веб-запит до IIS, але не закриваю з'єднання, він досягне межі, і я більше не зможу перевірити.
Василь Сіракіс

Гарне питання. Я гадаю, що це робить те саме, що і у вашій відповіді (оскільки ви / ми не розпоряджаємось ним або закриваємо розетку вручну); TcpClient повинен отримати сміття, зібране в якийсь момент, інакше розетка потрапить до очікування очікування перед цим. Лише здогадка, не перевіряли!
Цуушин

1
Якщо ви не хочете турбуватися про те, щоб залишити сокет відкритим на деякий час, ви можете зробити це: (New-Object System.Net.Sockets.TcpClient ($ ip, $ port)). Помилка, якщо ви не можете підключитися, але він роздрукує це, якщо він підключився, тоді успішно закрив порт: void Close ()
Tsuushin

41

Ось декілька різних способів тестування TCP-порту без telnet.

BASH ( сторінка man )

# 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

# 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

+1 Не знав про метод завивки, дуже круто! :)
вибух
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.