2016-11-10 11 views
0

私は162ポートでリッスンするコードを書きました。次のようになります。162ポートをカスタマイズされたポートにリダイレクトするには?

listenAddress = GenericAddress.parse(System.getProperty("snmp4j.listenAddress", "udp:0.0.0.0/162")); 
TransportMapping transport; 
if (listenAddress instanceof UdpAddress) { 
    transport = new DefaultUdpTransportMapping((UdpAddress) listenAddress); 
} else { 
    transport = new DefaultTcpTransportMapping((TcpAddress) listenAddress); 
} 
snmp = new Snmp(dispatcher, transport); 
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c()); 
snmp.listen(); 

しかし、このコードはroot以外のユーザーだけで起動できます。だから私がプログラムを実行すると、私はエラーが発生しました。 java.net.bindexception permission denied.

私は16200.に162ポートをリダイレクトしたいと私のコードでは、私はこの

listenAddress = GenericAddress.parse(System.getProperty("snmp4j.listenAddress", "udp:0.0.0.0/16200")); 

のようにそれを呼び出すことができますそれから私は/ etc/sysconfig/iptablesを変更し、それは仕事をdidn`tの。以下はiptablesの設定です。

*nat 
:PREROUTING ACCEPT [1379:235423] 
:POSTROUTING ACCEPT [6:680] 
:OUTPUT ACCEPT [6:680] 
-A PREROUTING -p udp -m udp --dport 162 -j REDIRECT --to-ports 16200 
COMMIT 
# Completed on Thu Nov 10 18:07:25 2016 
# Generated by iptables-save v1.3.5 on Thu Nov 10 18:07:25 2016 
*filter 
:INPUT ACCEPT [38534:3129869] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [2052:284032] 
-A INPUT -p tcp -m tcp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p udp -m udp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p udp -m udp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p udp -m udp --dport 161 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p udp -m udp --dport 162 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 16200 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A INPUT -p udp -m udp --dport 16200 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 161 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p udp -m udp --sport 161 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 162 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p udp -m udp --sport 162 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 161 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p udp -m udp --sport 161 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 162 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p udp -m udp --sport 162 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p tcp -m tcp --sport 16200 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -p udp -m udp --sport 16200 -m state --state ESTABLISHED -j ACCEPT 
COMMIT 
# Completed on Thu Nov 10 18:07:25 2016 
# Generated by iptables-save v1.3.5 on Thu Nov 10 18:07:25 2016 
*mangle 
:PREROUTING ACCEPT [39240:3206748] 
:INPUT ACCEPT [38535:3129909] 
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [2052:284032] 
:POSTROUTING ACCEPT [2052:284032] 
COMMIT 

16200ポートでトラップメッセージを受け取れるようにiptablesを設定するにはどうすればよいですか?あるいはこれを行うための他の方法がありますか?

私は混乱しています。私にいくつかの提案をお願いします。ありがとう!

答えて

0

すべての着信UDPパケットをポート162からユーザ定義ポート(>1024)に転送するには、iptablesを適切に設定する必要があります。

sudo iptables -t nat -A PREROUTING -i enp0s3 -p udp --dport 162 -j REDIRECT --to-port 5678 

enp0s3を適切なネットワークインターフェイス名に置き換える必要があります。 ifconfigを使用して、イーサネットインターフェイスの名前を調べます。通常 - eth0。この例では、ポート162からのすべての着信UDPパケットは、UDPポート5678に転送されます。

+0

はい、テスト環境ではすべて問題ありません。しかし、ダブルネットワークカードバインディングである私のusrの環境では、動作しません。私はiptablesコマンドに "-i bound0"を追加すべきだと思います。来週、usrの環境が利用可能になると、私はそれを試してみましょう。 – Wendy

関連する問題