我正在用 C 语言开发一个绑定在随机端口上的服务器
我担心所选的随机端口可能会与 iptables 规则冲突。我的意思是所选端口是否已经作为转发端口存在于 iptables 中。
如何使用 C 检查所选端口是否在 iptables 规则中不存在?
答案1
如果您的服务器使用的标准协议已经分配了官方端口号,那么您应该使用官方的端口号。
如果服务器使用没有官方端口号的非标准协议,则您应该使用 49152-65535 范围内的指定端口号:动态和/或私有端口。
IANA 尚未指定哪些数字用于动态分配,哪些用于本地定义的服务。但是您的操作系统可能会指定。对于 Linux,任何动态分配给向外连接的客户端的端口号都将取自/proc/sys/net/ipv4/ip_local_port_range
默认情况下,此范围为32768 61000
,因此您需要避免在此范围内或以下的任何内容。 61000 以上的端口号应该可以安全使用。
通常,您需要在配置中使用静态端口号,以便任何需要从外部联系它的人都知道要联系哪个端口号。但是您可以从该范围内选择一个随机数,并将其放入配置文件中,这样当您需要与选择了相同范围内端口号的其他服务一起工作时,端口扫描发现它的可能性就会降低,也不会导致冲突。
我通常使用此命令为任何本地定义的服务选择一个端口号:
echo $[61002+RANDOM%4532]
答案2
查看http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml并选择一个不常用的端口。(最好大于 1024)
就像任何其他 Linux 守护进程一样,创建并读取 .conf 来配置端口,以防用户想要更改它。