我正在开发一个C服务器绑定在一个随机的端口
恐怕select的随机端口可能与iptables规则冲突。 我的意思是如果select的端口可能已经存在于iptables中作为一个口令端口。
我怎样才能检查select的端口不存在于与C的iptables规则?
如果您的服务器使用的是已经分配了正式端口号的标准协议,那么您应该使用官方端口号。
如果服务器使用的是非标准协议而没有正式的端口号,则应使用49152-65535范围内指定的端口号:dynamic和/或专用端口。
IANA尚未指定用于dynamic分配的数字以及用于本地定义的服务的数字。 但是你的操作系统可能 在Linux的情况下,dynamic分配给/proc/sys/net/ipv4/ip_local_port_range连接的客户端的端口号将取自/proc/sys/net/ipv4/ip_local_port_range指定的范围
默认情况下,这个范围是32768 61000 ,所以你需要避免在这个范围或者下面的任何东西。 61000以上的端口号应该可以安全使用。
通常情况下,您需要在您的configuration中使用静态端口号,以便任何需要从外部与其联系的人知道要联系哪个端口号。 但是,您可以从范围中select一个随机数,并将其放入您的configuration文件中,以便在您需要使用另一个从其中select了端口号的服务时,通过端口扫描发现该端口号不太可能被发现或导致冲突相同的范围。
我通常使用这个命令为本地定义的服务select一个端口号:
echo $[61002+RANDOM%4532]
检查http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml并select一个没有太多使用的端口。 (最好超过1024)
简单地像任何其他Linux deamon一样,创build并读取一个.confconfiguration端口,以防用户想要更改它。