2017-07-19 233 views
-1

在我的嵌入式Linux系统(有一些有限的资源)下工作时,我当前的应用程序要求外部设备通过端口502上的以太网TCP/IP与此板交谈。默认情况下, * 1024下的端口在* nix环境下被阻塞。在端口502上允许传入连接并进行双向端口转发

因此,假设外部设备在502上打开端口,并且嵌入式设备在8502上侦听。如何透明地在这些设备之间实现双向通信?

好消息是ROOT访问被授予实现此端口转发解决方案的权利,该解决方案将持续运行在嵌入式Linux设备中,但尚未找到正确的命令。

我已经使用iptables尝试,用下面的命令的不同组合:

iptables -A INPUT -p tcp --dport 502 -j ACCEPT 
iptables -A OUTPUT -p tcp --dport 502 -j ACCEPT 
iptables -A INPUT -p tcp --dport 8502 -j ACCEPT 
iptables -A OUTPUT -p tcp --dport 8502 -j ACCEPT 
iptables -t nat -A PREROUTING -p tcp --dport 502 -j DNAT --to 0.0.0.0:8502 
iptables -A INPUT -p tcp --dport 502 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -p tcp --sport 502 -m state --state ESTABLISHED -j ACCEPT 
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 502 -j DNAT --to 127.0.0.1:8502 
iptables -t nat -I OUTPUT -p tcp -o eth0 --dport 8502 -j REDIRECT --to-ports 502 

最后,执行iptables-save这样的规则可以被实现。

一些限制:

  • 因为它是一个约束装置,无法安装新的包(内它远远没有一个apt-get的...);
  • 无法预测外部设备的IP地址,因为它可以来自不同设备每个建立的连接。

有关如何继续此任务的任何想法?提前致谢。

编辑:无论socat也不netcap可...

回答

0

在对这一问题非常情况下,别人绊倒:不幸的是,我的iptables的版本不是重定向,这是使它工作的关键支持。 所以解决方案是编译我的硬件的另一个应用程序。在这种情况下socat

的命令,以使我的应用程序的工作是:

socat TCP-LISTEN:502,fork TCP-CONNECT:127.0.0.1:8502

希望它可以为未来的需求有所帮助。