Linux kernel 我可以告诉内核为我的应用程序范围的端口保存吗?

Linux kernel 我可以告诉内核为我的应用程序范围的端口保存吗?,linux-kernel,Linux Kernel,我正在开发一个软件,外部软件可以使用它,这个外部软件可以使用我使用的端口,我希望能够保存一系列端口,以便仅对我的软件可用,当外部软件不使用它时,它们将得到一个错误 是否有任何系统调用告诉内核为我的应用程序保存端口范围?一旦应用程序启动,您就可以打开端口并绑定到它们,无需再保留它们。在应用程序启动之前,不能使用任何系统调用 在linux上,系统管理员可以执行以下操作 # echo 30000 31000 > /proc/sys/net/ipv4/ip_local_port_range 这意

我正在开发一个软件,外部软件可以使用它,这个外部软件可以使用我使用的端口,我希望能够保存一系列端口,以便仅对我的软件可用,当外部软件不使用它时,它们将得到一个错误


是否有任何系统调用告诉内核为我的应用程序保存端口范围?

一旦应用程序启动,您就可以打开端口并绑定到它们,无需再保留它们。在应用程序启动之前,不能使用任何系统调用

在linux上,系统管理员可以执行以下操作

# echo 30000 31000 > /proc/sys/net/ipv4/ip_local_port_range
这意味着内核将只在随机分配端口号时使用该范围的端口。这也有一个好办法。因此,从理论上讲,您可以为应用程序保留64000-65000端口,并告诉运行软件的计算机管理员要使用这些端口

# echo 1024 64000 > /proc/sys/net/ipv4/ip_local_port_range
在引导过程的早期某处

然而,我强烈建议您不要这样做——任何至少有一点经验的系统管理员都会告诉您正确使用effing软件。这种依赖性使管理变得一团糟,如果您试图在一台机器上使用需要不同端口范围的多个不同软件包,您将完全失败

最好的办法是在运行任何外部程序之前,为每个要保留的端口打开并绑定一个套接字

顺便说一句,我曾经遇到过类似的问题,在一台在启动阶段早期安装了NFS目录的机器上,这会不时地在本地使用端口993和995,这会阻止POP3和imapd的ssl版本启动。我通过编写一个绑定到这些端口的小程序来解决这个问题,甚至在NFS做任何事情之前就启动了这个程序,并在POP3和imapd的引导脚本中再次终止了它。如果其他软件在程序启动前使用了您的端口,那么这样的解决方案也可能适用于您。但同样,我认为这是一个邪恶的黑客,而不是一些好的软件应该依赖。