Введение: я создал функцию bash, которая может проверять, доступен ли порт, и увеличивает его на 1, если false до определенного максимального номера порта. Например, если порт 500 недоступен, то наличие 501 будет проверяться до 550.
Цель: чтобы протестировать эту функцию bash, мне нужно создать диапазон портов, которые находятся в состоянии LISTEN.
Попытки: В Windows можно создать порт LISTEN, используя следующие команды PowerShell :
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u> $listener = [System.Net.Sockets.TcpListener]1234
PS C:\Users\u> $listener.Start();
PS C:\Users\u> netstat -nat | grep 1234
TCP 0.0.0.0:1234 0.0.0.0:0 LISTENING InHost
PS C:\Users\u> $listener.Stop();
PS C:\Users\u> netstat -nat | grep 1234
PS C:\Users\u>
Исходя из этого, я пытался придумать команду, которая могла бы сделать то же самое в CentOS, но я не знаю почему, и я начал работать с Google, не найдя решения, которое решает эту проблему.
Ожидаемый ответ : Я приму и подтвердлю ответ, который содержит команду, которая может создать порт LISTEN, и после выполнения команды порт должен оставаться в состоянии LISTEN, то есть:
[user@host ~]$ ss -nat | grep 500
LISTEN 0 128 *:500 *:*
источник
netstat -an --tcp | awk '/LISTEN/ {sub(".*:", "", $4); print $4}' | sort -nu
. На * BSD:netstat -an -f inet -p tcp | awk '/LISTEN/ {sub(".*\\.", "", $4); print $4}' | sort -nu
.Ответы:
Вы можете использовать
nc -l
как метод, чтобы сделать то, что вы ищете. Некоторые реализацииnc
имеют-L
опцию, которая позволяет соединениям сохраняться.Если они вам понадобятся лишь на некоторое время, вы можете открыть эту команду в
for
цикле и таким образом открыть несколько портов.Если вам нужно, чтобы они открывались дольше, вы можете использовать один из супер-серверов для создания демона.
источник
-L
я хотел бы предложить:-k
,--keep-open
принять несколько соединений в режиме прослушиваниявы можете создать прослушиватель портов с помощью Netcat.
Вы также можете проверить, открыт порт или нет, используя команду netstat.
Вы также можете проверить с помощью nc:
Netcat Server слушатель:
Netcat Client:
если порт не открыт
источник
-p
или он не работал:nc -l -p 1234
/bin/nc --> nc.traditional
(например, Debian), используйте-p
опцию, как советовал @Leahkim, выше.Слушай, используя netcat.
Проверьте используя ss
источник
Обратите внимание, что
netcat
пакет Debian имеет другую реализацию, где (по крайней мере) вам нужно предоставить порт через-p
опции, а-k
опция не работает. Вы можете столкнуться с этой проблемой, используя Docker.sudo apt install -y netcat
nc -l -p 1337
Вы можете рассмотреть возможность использования
openbsd-netcat
вместо того, где-k
опция работает.источник
Ниже код Python полезно, чтобы открыть фиктивный порт
'' 'Простой сервер сокетов с использованием потоков' '' импорт сокетов импорта sys HOST = '' # Символическое имя, означающее все доступные интерфейсы PORT = 5500 # Произвольный непривилегированный порт s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) печать «Сокет создан»
Привязать сокет к локальному хосту и порту
try: s.bind ((HOST, PORT)), за исключением socket.error как msg: print 'Связать не удалось. Код ошибки: '+ str (msg [0]) +' Message '+ msg [1] sys.exit () print' Socket bind complete '
Начните слушать на сокете
s.listen (10) print 'Socket now listening'
теперь продолжайте говорить с клиентом
в то время как 1: # ждать принятия соединения - блокировка вызова conn, addr = s.accept () print 'Connected with' + addr [0] + ':' + str (addr [1]) s.close ()
Сохраните файл и запустите его командой python, как показано ниже
~] # python portlistener.py Socket создан Socket bind завершен Socket сейчас слушает
Затем вы можете проверить с требуемой машины.
источник