如何获取 Unix 服务器中可用的端口列表

PSa*_*Sam 16 networking

我需要知道我的 Solaris 机器中的哪些端口可以免费用于任何类型的网络通信。

我试过netstat -a命令。但是返回的信息并没有给出一个令人信服的结果,即我可以将哪些端口用于我正在编写的新应用程序。感谢在这方面提供的任何帮助。

jll*_*gre 18

1:您不应该使用匿名端口(又名临时端口)来实现 UDP 或 TCP 服务。

默认情况下,这些端口在 32768 - 65535 范围内。

# ndd /dev/tcp tcp_smallest_anon_port
32768
# ndd /dev/tcp tcp_largest_anon_port 
65535
Run Code Online (Sandbox Code Playgroud)

2:除非您的服务以 root 身份运行或具有所需的 RBAC 权限,否则您不应使用特权端口。默认情况下,从 1 到 1024 的所有端口都具有特权:

# ndd /dev/tcp tcp_smallest_nonpriv_port
1024
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

4:您不应该使用现有服务已经使用的端口。您可以通过运行获得这些:

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

5:最后,您不应使用当前已禁用但将来可能会启用的服务所使用的端口。这是要遵守的最棘手的部分......


Vai*_*and 12

您可以在系统上使用 1-65,535 个端口,其中前 1024 个是 root 特权的。

因此,您可以使用以下命令获取已用端口列表,而不是找到空闲端口

netstat -tunlep | grep LISTEN | awk '{print $4}'
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 1-65535 之间的任何端口,但这些端口除外。

  • Solaris `netstat` 实现不支持您使用的某些 `netstat` 选项。 (2认同)