Каковы альтернативы для проверки открытых портов, кроме Telnet?

шаг 1: записать его в сценарий

cat script.sh
df -lh | awk '{if ($5 >= 20) { print $6 "  " $2 "   "  $3  "  " $5 }}'
top -b -n1 | grep "Cpu(s)" | awk '{print 100 - $5}'

шаг 2: scp его для хостов. (scp - это безопасная копия), хост находится в $ h

scp script.sh $h:/tmp

шаг 3: выполните его

ssh $h bash /tmp/script.sh

Вы можете перенаправить вывод

ssh $h bash /tmp/script.sh > result-$h.txt
25
04.11.2018, 17:01
8 ответов

Netcat(nc)— один из вариантов.

nc -zv kafka02 6667
  • -z= устанавливает nc для простого поиска прослушивающих демонов, фактически не отправляя им никаких данных
  • -v= включает подробный режим
81
27.01.2020, 19:40

При использовании Bash Shell вы можете использовать его функцию, чтобы проверить, открыт или закрыт порт:

(timeout 1 bash -c '</dev/tcp/127.0.0.1/17500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT OPEN

(timeout 1 bash -c '</dev/tcp/127.0.0.1/7500 && echo PORT OPEN || echo PORT CLOSED') 2>/dev/null
PORT CLOSED

Обратите внимание, что если сервер не отвечает в течение 1 секунды, истекает тайм-аут, команды между 'прерываются, и, таким образом, ничего не печатается.

40
27.01.2020, 19:40

Золотым стандартом, несомненно, являетсяnmap(nmap.org ), но для «наилучших результатов» обычно требуется root. Однако доступны автономные двоичные файлы, и их можно запустить от имени непривилегированного пользователя, просто с ограниченными возможностями. Например, вместо скрытого сканирования syn(-sS)выполняется возврат к стандартному сканированию соединения TCP (-sT). Функционально он эквивалентен netcat, но благодаря хорошему множеству -хостов ускорил -имеющиеся у него возможности.

Пример:

not-root$ nmap -sT google.com
Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-04 21:01 GMT
Nmap scan report for google.com (172.217.23.14)
Host is up (0.12s latency).
rDNS record for 172.217.23.14: lhr35s01-in-f14.1e100.net
Not shown: 998 filtered ports
PORT    STATE SERVICE
80/tcp  open  http
443/tcp open  https
26
27.01.2020, 19:40
ss -lt 

это еще одна команда, которую вы можете использовать.

0
27.01.2020, 19:40

Если Perl является опцией, вы можете использовать его модульIO::Socketдля проверки подключения к определенному хосту и порту; сценарий ниже hard -кодирует TCP как протокол (, который будет использовать telnet):

#!/usr/bin/perl -w

# tries to connect to the given IP and port (tcp)

use strict;
use IO::Socket;

my $desthost = shift or die "Usage: $0 host port\n";
my $destport = shift or die "Usage: $0 host port\n";

gethostbyname($desthost) || die "Invalid host given\n";

my $handle = IO::Socket::INET->new(
        PeerAddr => $desthost,
        PeerPort => $destport,
        Proto    => 'tcp')
    or die "can't connect to $desthost:$destport: $!\n";
close $handle;
print "Success!\n"

Пример вывода из закрытого порта:

$./above-script kafka02 6667
can't connect to kafka02:6667: Connection refused

Пример вывода из открытого порта:

$./above-script kafka02 4200
Success!
7
27.01.2020, 19:40

Файл устройства /dev/tcp и /dev/udp можно использовать вместо telnet. Пример:echo 0 > /dev/tcp/103.64.35.86/6667. Затем проверьте статус выхода с помощью echo $?. Если статус выхода равен 0, то порт открыт. Если статус выхода не равен -нулю, порт закрыт. Для проверки пакетов udp используйте echo 0 > /dev/udp/103.64.35.86/6667.

2
27.01.2020, 19:40

«завиток» может облегчить жизнь. Не требуется рут; curl легко доступен во всех Linux-системах

1 )Если порт не открыт, отображается ниже выход

[niti@SourceServerName ~]$ curl -vv telnet://DestinationServerName:80

* About to connect() to DestinationServerName port 80 (#0)
*   Trying 192.168.0.100...

2 )Если порт открыт, ниже появится вывод

[niti@SourceServerName ~]$ curl -vv telnet://DestinationServerName:443

* About to connect() to DestinationServerName port 443 (#0)
*   Trying 192.168.0.100...
* Connected to DestinationServerName (192.168.0.100) port 443 (#0)

CtrlC для выхода

11
27.01.2020, 19:40

Я нашел этот способ быстрым и простым, через интерпретатор Python (изhttps://serverfault.com/a/500062/168647):

[gryphius@ut ~]$ python
Python 2.6.6 (r266:84292, Feb 22 2013, 00:00:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2                                                                                                                                                                                                                               
Type "help", "copyright", "credits" or "license" for more information.                                                                                                                                                                                                         
>>> import socket                                                                                                                                                                                                                                                              
>>> conn=socket.create_connection(('gmail-smtp-in.l.google.com',25))                                                                                                                                                                                                           

Если до сих пор это не вызывало ошибку, соединение в порядке.

1
27.02.2020, 14:10

Теги

Похожие вопросы