Как найти свободный порт TCP

Как найти полностью свободный порт TCP на сервере? Я пробовал командную строку;

netstat -an

но мне сказали, что те, у которых статус ПРОСЛУШИВАЕТСЯ, уже используются.

Я также попробовал инструмент под названием TCPView, но он снова показал только, какие TCP-порты используются. Я знаю, как подключиться к порту по телнету, чтобы проверить его открытие, но мне нужно найти свободный порт.


person AJF    schedule 11.03.2015    source источник
comment
AJF: Ты пробовал?   -  person NeverGiveUp161    schedule 11.03.2015
comment
@ user3560140 Да. Ваша команда просто показывает список опций параметров, и я попробовал несколько. Они показывают, что TCP-порты ПРОСЛУШИВАЮТСЯ, но я считаю, что они уже используются и не могут видеть свободный порт. Статус свободного порта будет СВОБОДНЫМ или ОТКРЫТЫМ или как?   -  person AJF    schedule 11.03.2015
comment
Добавьте к этому -p, он покажет процесс, открывший порт: netstat -antup, все, что не используется, БЕСПЛАТНО :)   -  person NeverGiveUp161    schedule 11.03.2015
comment
@user3560140 user3560140 Спасибо за дальнейшие отзывы. Я попробовал netstat -antup и netstat -lntup, и оба просто предоставили список параметров параметров, как и раньше. Итак, я попробовал netstat -antp, и в нем были указаны активные соединения и пустой список с заголовками столбцов Proto, Local Address, Foreign Address, State и Off Load State. Но, как я уже сказал, в нем нет соединений   -  person AJF    schedule 11.03.2015


Ответы (3)


netstat -lntu

Это решит вашу цель.

person NeverGiveUp161    schedule 11.03.2015
comment
Эта команда выведет список открытых сетевых портов и процессов, которым они принадлежат. Посетите: superuser.com/a/529831/881022 - person JRichardsz; 12.06.2018

На основе https://gist.github.com/lusentis/8453523

Начните с начального порта и увеличивайте его до тех пор, пока он не станет пригодным для использования.

BASE_PORT=16998
INCREMENT=1

port=$BASE_PORT
isfree=$(netstat -taln | grep $port)

while [[ -n "$isfree" ]]; do
    port=$[port+INCREMENT]
    isfree=$(netstat -taln | grep $port)
done

echo "Usable Port: $port"
person Feng    schedule 07.08.2017

В Bash вы можете написать простой цикл for, чтобы проверить, какие TCP-порты свободны, например.

$ for i in {1..1024}; do (exec 2>&-; echo > /dev/tcp/localhost/$i && echo $i is open); done
22 is open
25 is open
111 is open
587 is open
631 is open
841 is open
847 is open
1017 is open
1021 is open

Для получения дополнительной информации см.: Расширенное руководство по написанию сценариев Bash: глава 29. /dev и /proc< /а>

person kenorb    schedule 11.02.2016
comment
Должно ли это работать на Mac? Он завершился, не вернув мне никакого вывода - person stevec; 07.06.2020