如何为自定义应用程序选择静态端口号?

ccl*_*eve 17 linux port

我们有一个自定义应用程序,需要在它自己的端口号上提供请求.我们真的不在乎数字是多少,虽然在我们决定之后我们会坚持到那个端口.如何选择最不可能与用户系统上运行的其他应用程序或服务冲突的号码?

我们应遵循哪些规则或标准?

澄清一下:一旦我们选择了一个端口,我们就需要坚持下去.不能使用动态的.我们正在构建一个自定义SFTP服务器,我们必须告诉客户它正在运行什么端口.

Mic*_*ski 13

对于静态应用程序,请考虑检查/etc/services以查找不会与您正在使用的任何其他内容发生冲突的端口,并且在其他地方不常用.

$ tail /etc/services
nimspooler      48001/udp                       # Nimbus Spooler
nimhub          48002/tcp                       # Nimbus Hub
nimhub          48002/udp                       # Nimbus Hub
nimgtw          48003/tcp                       # Nimbus Gateway
nimgtw          48003/udp                       # Nimbus Gateway
com-bardac-dw   48556/tcp                       # com-bardac-dw
com-bardac-dw   48556/udp                       # com-bardac-dw
iqobject        48619/tcp                       # iqobject
iqobject        48619/udp                       # iqobject
Run Code Online (Sandbox Code Playgroud)


jwe*_*ich 8

如果您无法预测应用程序将要运行的确切环境类型,请不要为此烦恼.选择1024以上的任何数字,并使其可配置,以便用户可以在与其他服务/应用程序发生冲突时进行更改.

当然你仍然可以避免非常常见的端口,如8080(替代HTTP)或3128(代理如鱿鱼),1666(perforce)等.您可以在这里查看已知端口的完整列表,或者查看/ etc/services .


Chr*_*ung 7

如果您不关心端口号,并且不介意它在每次运行程序时都会更改,只需在侦听之前不要绑定端口(或者如果要绑定,则绑定端口0)特定的IP地址).在这两种情况下,您都告诉操作系统为您选择一个免费端口.

开始收听后,使用getsockname以找出选择的端口.您可以将其写入文件,在屏幕上显示,让孩子继承fork,等等.