我們有一個自定義應用程序需要在它自己的端口號上提供請求。我們真的不在乎數字是什麼,儘管我們決定後會堅持到那個端口。如何選擇最不可能與用戶系統上運行的其他應用程序或服務衝突的號碼?如何選擇一個自定義應用程序的靜態端口號?
我們應該遵循哪些規則或標準?
澄清:一旦我們選擇一個端口,我們需要堅持下去。不能使用動態的。我們正在構建一個自定義的SFTP服務器,我們必須告訴我們的客戶它正在運行的端口。
我們有一個自定義應用程序需要在它自己的端口號上提供請求。我們真的不在乎數字是什麼,儘管我們決定後會堅持到那個端口。如何選擇最不可能與用戶系統上運行的其他應用程序或服務衝突的號碼?如何選擇一個自定義應用程序的靜態端口號?
我們應該遵循哪些規則或標準?
澄清:一旦我們選擇一個端口,我們需要堅持下去。不能使用動態的。我們正在構建一個自定義的SFTP服務器,我們必須告訴我們的客戶它正在運行的端口。
如果您無法預測應用程序將要運行的確切環境類型,不用擔心這一點。選擇超過1024的任何數字,並使其可配置,以便用戶在與其他服務/應用程序衝突的情況下可以對其進行更改。
當然,您仍然可以避免像8080(替代HTTP)或3128(代理如魷魚),1666(perforce)等非常常見的端口。您可以查看已知端口的完整列表here,或者查看/ etc/services中。
對於靜態應用程序,請考慮檢查/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
如果你不關心的端口號,並且不介意,它改變每次你運行程序時,只要你聽它之前沒有綁定端口(或端口綁定0,如果你想綁定一個特定的IP地址)。在這兩種情況下,你都告訴操作系統爲你選擇一個自由端口。
開始收聽後,使用getsockname
找出哪個端口被選中。您可以將它寫入文件,在屏幕上顯示,讓孩子通過fork
等繼承它。
澄清:一旦我們選擇一個端口,我們需要堅持下去。不能使用動態的。我們正在構建一個自定義的SFTP服務器,我們必須告訴我們的客戶它正在運行的端口。 – ccleve