Если вы хотите воссоздать все окна, вы можете вставить в ~/.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'
Вы можете попробовать несколько способов проверить, прослушивает ли что-то определенный порт:
С 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
, могут работать в вашей среде
Чтобы решить эту проблему, я написал 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'
)и позволяет ввести имя хоста и порт; он сообщает об успехе или неудаче на основе ответа удаленной стороны (прослушивания )на этом порту.
На самом деле лучше не использовать инструмент 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.
s6-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.
Подробнее см. страницы руководства. Используемые здесь параметры отключают различные информационные запросы о конечных точках, которые вам не нужны для проверки подключения. Входной хост и порт могут быть символическими. То, что напечатано, будет числовым.
Эти инструменты переносимы и могут быть собраны из исходного кода в различных системах. На самом деле они даже предварительно -собраны и упакованы в виде двоичных файлов для нескольких операционных систем или доступны через порты, включая, но не ограничиваясь: