你如何决定使用哪个端口?

96
这有点主观,因为没有所谓的“规则”。每次我创建服务器时,我都会想:“使用哪个端口最好?” 我猜答案是“任何一个,只要用户可以更改它。”那么,其他人是如何决定选择默认端口的呢?就个人而言,如果涉及HTTP,我喜欢使用类似于8000的端口,我注意到这是一个相当普遍的趋势。但是如果8000已经被占用了怎么办?使用8001吗?这似乎有点临时抱佛脚,而且我认为确实是这样。
显然,我不是第一个提出这个问题的人;IANA维护端口号列表... 这让我想到了未分配范围(48620-49150)。我猜我们真的应该使用这些,但为什么更多的程序员不这样做呢?你是怎么决定使用哪个端口的?如果每个人都从#1开始,那么我们都将使用48620。

11
回答自己的问题加一分。 - fupsduck
4
谢谢 - 我想告诉大家我的思考过程,这样别人就可以纠正我如果我错了。 - Nick Bolton
8个回答

52

我认为你已经尽可能回答了你的问题,除了你已经提到的内容,这里没有真正严格的规则可以遵循。但是通常:

  • 查看IANA列表并选择一个未被使用的端口。
  • 选择一个容易记住的端口号。
  • 不要在代码中固定端口号。其他产品可能选择了与您相同的端口,您永远不知道何时需要在服务器上共存,因此将端口号放在某个配置文件中,以便在必要时进行更改而无需重新编译。更改端口号的能力也有助于通过防火墙而无需重新配置它们。 (如果配置文件不存在,则始终默认为您选择的值。)
  • 有一种观点认为您不希望选择太高的端口,因为您可能会与短暂端口使用的范围发生冲突。虽然发生这种情况的可能性不大,但当发生时,这是一个难以调试的问题。

(如果您想要挑选易记的端口号的技巧,我曾经和一个人合作过,他根据同事的电话分机号记住端口号。)


查看IANA列表并选择一个未被使用的端口,或者选择一个较大的数字。 - Patrick
12
49152以下的大量数字,显然我知道,我真的知道。 - Patrick

28

一些易于记忆且适当地充满技术感的未分配端口(根据 IANA):

27182(e)

31415(pi)

60221(阿伏伽德罗之数)


17

在测试期间,始终使用端口号666;)


11
你总是使用 root 身份运行吗? - Josh Lee
21
这是保留给《毁灭战士》游戏的!你应该尊重它。 - Display Name

3
如何呢:
defaultPort = (new Random()).Next(48620, 49150);

1
我更喜欢这种方式:(接下来是Python代码)
#!/usr/bin/env python3
import random as R
r = R.SystemRandom()
print([r.randrange(1024, 65535) for x in range(4)])

然后我选择我最喜欢的数字。当然,如果您对可接受数字有更严格的限制,请更改范围。


int.from_bytes(hashlib.sha256(b"my application name").digest()[:4], "little") & 0xFFFF - c z
我不会让它随机选择。很容易从系统中高范围的短暂根进程启动器中选择一个。 - james-see

1
你自己回答了问题?选择任何未分配的端口并允许用户更改它。

0

通过快速的谷歌搜索以确认清晰,我通常会选择一个个人意义重大的数字。


0
我建议不要使用五位数的大端口号,因为它可能会影响其他操作系统进程并分配临时端口。由于其限制,您将开始收到“已在使用错误”的提示。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接