Як створити слухача 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:

nc -l localhost 5000

Клієнт Netcat:

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
юень ши

Для тих, хто має /bin/nc --> nc.traditional(наприклад, debian), скористайтеся -pопцією, як радив @Leahkim, вище.
ankostis

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) print "Розетка створена"

Прив’яжіть сокет до локального хоста та порту

спробуйте: s.bind ((HOST, PORT)) за винятком socket.error як msg: print 'Прив’язати не вдалося. Код помилки: '+ str (msg [0]) +' Message '+ msg [1] sys.exit () print "Socket bind завершено"

Почніть слухати на сокет

s.listen (10) друкувати "Розетка зараз слухає"

тепер продовжуйте спілкуватися з клієнтом

у той час як 1: # чекаю прийняття з'єднання - блокування виклику conn, addr = s.accept () друк 'Підключено до' + addr [0] + ':' + str (addr [1]) s.close ()

Збережіть файл і запустіть його за допомогою команди python, як показано нижче

~] # python portlistener.py Socket створений Socket прив'язує повний Socket зараз прослуховуючи

Потім ви можете перевірити потрібну машину.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.