Я ищу команду или скрипт, который возвращает неиспользуемый порт в моей системе Ubuntu Linux. Я смотрю в Интернете, и единственное, что я нахожу, - это порт used / Listen с помощью команды nestat. Очевидно, что-то с командой netstat будет работать, но не знаю, что именно. Есть идеи как?
Благодарю.
linux
command-line
port
user2429082
источник
источник
Ответы:
netstat -lat
дает полный список прослушивания и установленных портов.Когда порт не находится ни в одном из этих состояний, для системы не существует, поэтому вы не найдете команду, которая показывает список неиспользуемых портов.
Имейте в виду, что есть 65535 портов, поэтому все, что не включено,
netstat -lat
является неиспользуемым портом.Следующий скрипт bash выполнит простое сканирование портов TCP и сообщит, какие из них открыты, а какие закрыты :
Если вы сохраните его как portscan.sh, то он должен быть запущен как ./portscan.sh IP first_port last_port , например:
./portscan 127.0.0.1 20 135
будет сканировать локальное оборудование с портов с 20 по 135источник
Ruby 2.x (однострочник):
ruby -e 'require "socket"; puts Addrinfo.tcp("", 0).bind {|s| s.local_address.ip_port }'
На моей машине прямо сейчас напечатано:
Последующий вызов напечатан:
Этот метод заставляет текущего пользователя запрашивать неиспользуемый порт (привязать к порту «0»), а затем распечатывает номер порта, предоставленный операционной системой. И поскольку текущий пользователь задает вопрос, порты ниже 1024 не будут возвращены (если текущий пользователь = root).
Кредит, где кредит должен - это решение взято из комментария Фрэнклина Ю на unix.stackexchange.com. Какой самый простой способ найти неиспользуемый локальный порт?
источник
Короткий сценарий bash, который случайным образом генерирует число от 1025 до 60000 и циклически повторяется, пока это число не будет найдено в списке используемых портов. Это быстрое и грязное решение, которое имеет тенденцию к большим портам:
источник
Один лайнер
Я собрал хороший однострочный текст, который быстро служит цели, позволяя захватывать произвольное количество портов в произвольном диапазоне (здесь он разделен на 4 строки для удобства чтения):
Построчно
comm
утилита, которая сравнивает отсортированные строки в двух файлах Он выводит три столбца: строки, которые появляются только в первом файле, строки, которые появляются только во втором файле, и общие строки. Указывая,-23
мы подавляем последние столбцы и оставляем только первый. Мы можем использовать это, чтобы получить разницу двух наборов, выраженную в виде последовательности текстовых строк. Я узнал об этомcomm
здесь .Первый файл - это диапазон портов, из которых мы можем выбирать.
seq
производит отсортированную последовательность чисел от$FROM
до$TO
. Результат передается вcomm
качестве первого файла с использованием подстановки процесса .Второй файл - это отсортированный список портов, который мы получаем, вызывая
ss
команду (что-t
означает TCP-порты, то-a
есть все установленные и прослушиваемые - и-n
числовые - не пытайтесь разрешить, скажем,22
кssh
). Затем мы выбираем только четвертый столбец сawk
, который содержит локальный адрес и порт. Мы используемcut
для разделения адреса и порта с:
разделителем и оставляем только последний (-f2
).ss
также выведите заголовок, от которого мы избавляемся,grep
пропингуя непустые последовательности чисел, длина которых не превышает 5. Затем мыcomm
выполняем требования, используяsort
численно (-n
) и избавляясь от дубликатов с помощьюuniq
.Теперь у нас есть отсортированный список открытых портов, что мы можем
shuf
FLE , чтобы затем захватить первые"$HOWMANY"
те , сhead -n
.пример
Захватите три случайных открытых порта в частном диапазоне (49152-65535)
может вернуться к примеру
Примечания
-t
с-u
в ,ss
чтобы получить свободные порты UDP вместо этого.shuf
если вы не заинтересованы в захвате случайного портаисточник
Мне нужно было найти только один случайный неиспользуемый порт и не печатать их список. Вот мое решение Bash.
И использовать его, поставив его
источник
Возможно другое решение, основанное на списке используемых портов:
Команда
netstat
генерирует список всех открытых портов. Командаsed
извлекает номера портов, которые используются, а конструкцияsort
/uniq
возвращает уникальный список открытых портов. Второй шаг - создать список номеров портов, начиная с 1 и заканчивая 1000 (зарезервированные порты), и дополнительный список всех номеров портов, начиная с 1 до 65535. Финальный список содержит все доступные порты только один раз иuniq -u
будет извлекать их , И, наконец,shuf -n 1
будет выбран один случайный порт из полного списка доступных портов. Тем не менее, будет состояние гонки, прежде чем можно будет зарезервировать порт.источник
Мне нужно было найти следующий открытый порт, начиная с номера порта; Вот моя попытка использовать решение @Taras.
источник
Если ваш порт 54321, запустите:
Некоторые варианты использования netstat можно найти здесь .
источник