Проверка сервера на прослушивание без telnet, из CLI?

Если вы хотите воссоздать все окна, вы можете вставить в ~/.screenrc строки с именем, номером и командой, например:

screen -t root  0 bash
screen -t bash  1 bash
screen -t alpha 3 bash

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

$ screen -S work -X screen -t samsung 6 bash

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

$ screen -S work -p 5 -X title 'samsung root'
1
11.02.2019, 01:05
3 ответа

Вы можете попробовать несколько способов проверить, прослушивает ли что-то определенный порт:

С wget/curl

wget your_IP:port

Сnetstat

netstat -an|grep LISTEN|grep :port

Сlsof

lsof -i :port

Сnetcat

nc -vz your_IP port

С файловой системой /proc(, вероятно, будет работать только на Linux )(поясняется здесь)

Сss

ss|grep LISTEN|grep :port

Сnmap

nmap -sS -O -pport your_IP

EDIT1 Также (почти )можно использовать каждый клиент ssh,http,ftp, но иногда будет трудно понять, закрыт ли порт брандмауэром или недоступен.
EDIT2 В этом Q/A пример способа использования catи echoдля выполнения задания:

true &>/dev/null </dev/tcp/127.0.0.1/$PORT && echo open || echo closed

или только с execкомандой (, если вы не видите ошибку, порт открыт):

exec 6<>/dev/tcp/your_IP/port

И я нашел способ использовать только awkдля выполнения задания (оригинал здесь):

awk -v port=your_port 'function hextodec(str,ret,n,i,k,c){
    ret = 0
    n = length(str)
    for (i = 1; i <= n; i++) {
        c = tolower(substr(str, i, 1))
        k = index("123456789abcdef", c)
        ret = ret * 16 + k
    }
    return ret
}
function getIP(str,ret){
    ret=hextodec(substr(str,index(str,":")-2,2)); 
    for (i=5; i>0; i-=2) {
        ret = ret"."hextodec(substr(str,i,2))
    }
    ret = ret":"hextodec(substr(str,index(str,":")+1,4))
    return ret
} 
NR > 1 {{local=getIP($2);remote=getIP($3) }{ if (remote ~ "0:0" && local ~ ":"port) print local}}' /proc/net/tcp 

EDIT3 Как упоминалось в комментариях, некоторые методы, особенно основанные на файловой системе /dev, могут работать в вашей среде

4
28.04.2021, 23:37

Чтобы решить эту проблему, я написал perl-скрипт:

#!/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"

Он имитирует соединение telnet (см. жесткое -закодированное'tcp')и позволяет ввести имя хоста и порт; он сообщает об успехе или неудаче на основе ответа удаленной стороны (прослушивания )на этом порту.

2
28.04.2021, 23:37

На самом деле лучше не использовать инструмент telnet, который делает больше, чем просто открывает сокет TCP, при определенных обстоятельствах пытаясь говорить по протоколу TELNET через открытое соединение. Существует множество инструментов, которые можно использовать для открытия сокета TCP, не в последнюю очередь клиентские инструменты всех других протоколов на основе TCP -, таких как FTP-клиенты. Опять же, как и telnet, они могут в конечном итоге попытаться говорить по своим соответствующим протоколам после открытия соединения.

Для этой очень простой операции создания TCP-соединения и его немедленного закрытия, без попытки говорить по какому-либо протоколу по соединению, лучше всего использовать инструменты низкого -уровня. nc- это один, который я оставляю для других ответов. Но другие — это различные UCSPI -TCP и UCSPI -SSL клиенты, чья работа заключается исключительно в том, чтобы делать именно то, что вы хотите :открыть соединение. Просто заставьте программу, которую они затем загружают по цепочке -, ничего не делать, кроме сообщения об успехе.

  • tcp-socket-connectв пакете nosh:
    tcp-socket-connect "${HOST}" "${PORT}" \
         sh -c 'echo Connected to ${TCPREMOTEIP}:${TCPREMOTEPORT} successfully.'
    Это касается как IPv4, так и IPv6.
  • tcpclientв пакет djbwares , слегка отшлифованная версия оригинального пакета Daniel J. Bernsteintcpclient:
    tcpclient -H -R -l 0 "${HOST}" "${PORT}" \
         sh -c 'echo Connected to ${TCPREMOTEIP}:${TCPREMOTEPORT} successfully.'
    Это поддерживает только IPv4, хотя существует несколько исправленных версий, которые также могут работать с IPv6.
  • Laurent Bercots6-tcpclientиз s6 -networking:
    s6-tcpclient -N -H -R -l 0 "${HOST}" "${PORT}" \
         sh -c 'echo Connected to ${TCPREMOTEIP}:${TCPREMOTEPORT} successfully.'
    Это касается как IPv4, так и IPv6.
  • Уильям Бакстерsslclient:
    sslclient -H -R -l 0 "${HOST}" "${PORT}" \
         sh -c 'echo Connected to ${SSLREMOTEIP}:${SSLREMOTEPORT} successfully.'
    Это также согласовывает SSL/TLS. Он работает только с IPv4, хотя Феликс фон Лейтнер публикует исправленную версию, которая также поддерживает IPv6.

Подробнее см. страницы руководства. Используемые здесь параметры отключают различные информационные запросы о конечных точках, которые вам не нужны для проверки подключения. Входной хост и порт могут быть символическими. То, что напечатано, будет числовым.

Эти инструменты переносимы и могут быть собраны из исходного кода в различных системах. На самом деле они даже предварительно -собраны и упакованы в виде двоичных файлов для нескольких операционных систем или доступны через порты, включая, но не ограничиваясь:

2
28.04.2021, 23:37

Теги

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