Как получить список портов, которые свободны на сервере Unix

15

У меня есть требование знать, какие все порты на моей машине Solaris могут свободно использоваться для любого вида сетевого взаимодействия.

Я попробовал netstat -aкоманду. Но возвращенная информация не дала убедительного результата - все порты, которые я могу использовать для нового приложения, которое я пишу. Ценю любую помощь, оказанную в этом отношении.

PSAM
источник
В каком числовом диапазоне? Всегда используются эфемерные порты, и они постоянно меняются.
MDPC
А как же результат netstat -anбыл не убедителен для вас? netstatдолжен перечислить все, что используется. Все остальное (обычно много тысяч портов!) Доступно.
Селада
1
Кроме того, это может помочь узнать, зачем вам эта информация. При связывании сокета вы всегда можете разрешить ядру назначить порт для вас, поэтому, если вам все равно, какой порт вы получите, если он у вас есть, вам не нужно искать его вручную.
Селада

Ответы:

15

1: Вы не должны использовать анонимные порты (также временные порты) для реализации службы UDP или TCP.

По умолчанию эти порты находятся в диапазоне 32768 - 65535.

# ndd /dev/tcp tcp_smallest_anon_port
32768
# ndd /dev/tcp tcp_largest_anon_port 
65535

2: Если ваша служба не работает от имени пользователя root или не имеет требуемой привилегии RBAC, вы не должны использовать привилегированный порт. По умолчанию все порты от 1 до 1024 являются привилегированными:

# ndd /dev/tcp tcp_smallest_nonpriv_port
1024

3: Если вы не знаете, что делаете, вы не должны использовать хорошо известный порт, который, как ожидается, будет работать не так, как вы планируете. Хорошо известные порты перечислены в /etc/services. например:

# tail /etc/services
dtspc           6112/tcp                        # CDE subprocess control
fs              7100/tcp                        # Font server
solaris-audit   16162/tcp                       # Secure remote audit logging
servicetag      6481/udp
servicetag      6481/tcp
wnn6            22273/tcp                       # Wnn6 jserver
wnn6            22273/udp                       # Wnn6 jserver
rdc             121/tcp                         # SNDR server daemon
snmpd           161/udp        snmp             # Net-SNMP snmp daemon
swat            901/tcp                         # Samba Web Adm.Tool

4: Вы не должны использовать порт, который уже используется существующим сервисом. Вы можете получить это с помощью:

# netstat -an | grep LISTEN | nawk '{$0=$1;gsub(".*\\.","");print}' | sort -un

5. Наконец, вы не должны использовать порт, используемый службой, которая в настоящее время отключена, но она может быть включена в будущем. Это самая сложная часть для соблюдения ...

jlliagre
источник
10

Вы можете использовать 1-65 535 портов в вашей системе, в которых первые 1024 имеют привилегии root.

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

netstat -tunlep | grep LISTEN | awk '{print $4}'

Тогда вы можете использовать любой порт 1-65535, кроме этих портов.

Вайбхав Панманд
источник
2
Некоторые из используемых netstatвами опций не поддерживаются netstatреализацией Solaris .
Jlliagre