我有一个基于linux固件系统的网关。
我有一个iptables规则,它允许将端口8080转发到本地主机。
我正在为这个linux网关开发一个应用程序。此应用程序将选择8000到8100之间的随机端口。然后它将在这个随机端口上生成bind()。
如果随机端口是8080,bind()是否返回OK。然后应用程序可以在端口8080上启动侦听服务器?
我不想与iptables规则冲突。因此,如果bind()返回NOK,那么我可以重试选择另一个随机端口,然后重试绑定。
发布于 2016-03-11 15:46:05
bind()返回ok,并且不检查任何防火墙规则。bind()忽略防火墙规则有几个很好的原因。
bind()比iptables早得多,而且它是一个符合POSIX的调用。检查bind()可能会破坏反向的compatibility.bind()没有意思为否,则规则可能在不久的将来改变,并且绑定的端口可能变为不可用可以通过像libiptc这样的C接口读取iptables规则,但不推荐这样做:
正如在邮件列表中多次指出的那样,libiptc从来就不是一个公共接口。我们不能保证有一个稳定的接口,计划在下一代linux包过滤中删除它。libiptc的层级太低,无法合理使用。
我们很清楚,这样的API在根本上是缺乏的,我们正在努力改善这种情况。在此之前,建议使用system()或打开进入iptables-restore的stdin的管道。后者将为您提供更好的性能。
https://stackoverflow.com/questions/35898079
复制相似问题