我正在开发一个外部软件可以使用它的软件,这个外部软件可以使用我使用的端口,我希望能够保存一系列的端口,以便只对我的软件可用,当外部软件不使用它时,它们就会出错。
是否有任何系统调用告诉内核为我的应用程序保存端口范围?
发布于 2013-12-30 18:25:05
一旦应用程序启动,您就可以打开端口并绑定到它们,没有理由再保留它们。在应用程序启动之前,您不能使用任何系统调用。
系统管理员可以在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在启动过程的早期。
但是,我强烈建议您不要这样做--任何至少有一点经验的系统管理员都会告诉您如何正确使用您的软件。这种依赖使得管理变得一团糟,如果您试图在一台计算机上使用需要不同端口范围的几个不同的软件包,则会完全失败。
在运行任何外部程序之前,您可以做的最好的事情是打开并绑定每个您想要保留的端口的套接字。
顺便说一句,我曾经在一台在引导阶段早期挂载NFS目录的机器上遇到过类似的问题,这会时不时地在本地使用端口993和995,从而阻止了pop3d和imapd的ssl版本的启动。我编写了一个绑定到这些端口的小程序,甚至在NFS做任何事情之前就启动了该程序,从而解决了这个问题,并在pop3d和imapd的引导脚本中再次杀死了它。如果其他软件在程序启动之前使用您的端口,那么类似这样的东西也可能是您的解决方案。但是,我认为这是一个邪恶的黑客,而不是什么好的软件应该依赖。
https://stackoverflow.com/questions/20845112
复制相似问题