2017-07-19 228 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

希望它可以爲未來的需求有所幫助。