获取仍然可用的随机高端口号

9 sockets posix tcp

假设我想在IPC的某个端口上运行TCP/IP服务.当我将端口号传递给我想要与之通信的进程时,端口号无关紧要.什么是获得系统仍然可用的随机,高(通常> 49152)端口号的最佳方法?我可以使用POSIX中的东西吗?

我知道FTP服务器经常需要这个.

lot*_*har 14

如果您未指定端口号,操作系统将自动为您选择一个短暂的端口号.

选择端口号:

新的服务器软件应该努力避免依赖于特定的端口号,特别是如果它是用户级软件并非不可避免地与众所周知的端口绑定.幸运的是,通过请求端口0可以轻松完成此操作,端口0指示系统选择短暂的端口号.


Nic*_*zet 6

短暂的端口可以做到这一点.您的操作系统将为您分配空闲端口池中的端口.

有一些C代码,BSD许可,在这里这样做

在Python中,您可以('', 0)为同一目的指定socket.AF_INET地址对,例如sock.bind(('', 0))


Rem*_*eau -9

唯一的方法是循环遍历所需的端口范围,尝试一次将一个套接字绑定到每个端口,直到找到一个成功的端口。

  • 不,这不是唯一的方法。绑定到端口零是另一种方式,也是一种更好的方式。量子电动力学 (2认同)