Как создать слушатель TCP?


40

Введение: я создал функцию 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                       *:*

С другой стороны: можно найти порты прослушивания, не проходя весь этот танец. В Linux: 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.
lcd047

Ответы:


40

Вы можете использовать nc -lкак метод, чтобы сделать то, что вы ищете. Некоторые реализации ncимеют -Lопцию, которая позволяет соединениям сохраняться.

Если они вам понадобятся лишь на некоторое время, вы можете открыть эту команду в forцикле и таким образом открыть несколько портов.

Если вам нужно, чтобы они открывались дольше, вы можете использовать один из супер-серверов для создания демона.


1
Вместо того , -Lя хотел бы предложить: -k, --keep-openпринять несколько соединений в режиме прослушивания
Manuel Дерандо

37

вы можете создать прослушиватель портов с помощью Netcat.

root@ubuntu:~# nc -l 5000

Вы также можете проверить, открыт порт или нет, используя команду netstat.

root@vm-ubuntu:~# netstat -tulpen | grep nc
tcp        0      0 0.0.0.0:5000             0.0.0.0:*               LISTEN      0          710327      17533/nc

Вы также можете проверить с помощью nc:

Netcat Server слушатель:

nc -l localhost 5000

Netcat Client:

root@vm-ubuntu:~# nc -v localhost 5000
Connection to localhost 5000 port [tcp/*] succeeded!

если порт не открыт

root@vm-ubuntu:~# nc -v localhost 5000
nc: connect to localhost port 5000 (tcp) failed: Connection refused

4
Я должен был указать порт с -pили он не работал:nc -l -p 1234
Leahkim

nc -l 12345 работал в Ubuntu 16.04
yuen shi

Для тех, у кого /bin/nc --> nc.traditional(например, Debian), используйте-p опцию, как советовал @Leahkim, выше.
Анкостис

6

Слушай, используя netcat.

# nc -l 5555

Проверьте используя ss

# ss -nat|grep 5555
LISTEN     0      1                         *:5555                     *:*
#

0

Обратите внимание, что netcatпакет Debian имеет другую реализацию, где (по крайней мере) вам нужно предоставить порт через-p опции, а -kопция не работает. Вы можете столкнуться с этой проблемой, используя Docker.

sudo apt install -y netcat

nc -l -p 1337

Вы можете рассмотреть возможность использования openbsd-netcatвместо того, где-k опция работает.


0

Ниже код 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 сейчас слушает

Затем вы можете проверить с требуемой машины.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.