0

PCへの複数のネットワークインターフェイスがあります。他のPCにパケットを送信するためのUDP送信者としてeth0のみを構成したいと思います。udpsenderとして設定するインターフェイス名を指定するにはどうすればよいですか。libudp-tclをインストールしましたが、その方法を見つけることができません。誰かがそれを行う正確な方法を教えてもらえますか?

4

2 に答える 2

0

私が収集したものから、あなたが望むことをするために、あなたは最初bind(2)に特定のIPアドレス(で利用可能なものの1つeth0)に行く必要があります、しかしudpパッケージはこのようなものをサポートしていないようです。

したがって、パッケージに自分でパッチを適用する必要があるようです。Tclは優れたCAPIを備えているため、Cに精通していればそれほど難しくはありません。

于 2012-12-27T14:32:42.397 に答える
0

udpパッケージはあなたが望むことをすることができません。kostixが述べたように、バインディングインターフェイスをtclに公開するために、いつでもCレベルでudpパッケージを変更できます。

ただし、別の回避策があります。

Linuxでは、iptablesを使用して、特定のポートのパケットが特定のインターフェイスのみを通過するように制限できます。したがって、選択したUDPポート(たとえば9999)を開いて、そのポートからのパケットのみがeth0を通過し、他のインターフェイスからドロップすることを許可します。

たとえば、アプリケーションがUDPポート9999を使用しているとし、次のiptablesルールを設定します。

# Accept udp packets from port 9999 for eth0
iptables -A OUTPUT -i eth0 -p udp --source-port 9999 -j ACCEPT
# Drop udp packets from port 9999 for all other interfaces
iptables -A OUTPUT -p udp --source-port 9999 -j DROP

または、execを使用してtclで実行できます。

# Warning! Need to be root to do this:
set myPort 9999
exec /sbin/iptables -A OUTPUT -i eth0 -p udp --source-port $myPort -j ACCEPT
exec /sbin/iptables -A OUTPUT -p udp --source-port $myPort -j DROP

ただし、プログラムを終了する前に、追加したルールを削除することを忘れないでください。

# Clearup iptables rules
exec /sbin/iptables -D OUTPUT -i eth0 -p udp --source-port $myPort -j ACCEPT
exec /sbin/iptables -D OUTPUT -p udp --source-port $myPort -j DROP
于 2012-12-28T04:15:37.187 に答える