PCへの複数のネットワークインターフェイスがあります。他のPCにパケットを送信するためのUDP送信者としてeth0のみを構成したいと思います。udpsenderとして設定するインターフェイス名を指定するにはどうすればよいですか。libudp-tclをインストールしましたが、その方法を見つけることができません。誰かがそれを行う正確な方法を教えてもらえますか?
2 に答える
私が収集したものから、あなたが望むことをするために、あなたは最初bind(2)
に特定のIPアドレス(で利用可能なものの1つeth0
)に行く必要があります、しかしudp
パッケージはこのようなものをサポートしていないようです。
したがって、パッケージに自分でパッチを適用する必要があるようです。Tclは優れたCAPIを備えているため、Cに精通していればそれほど難しくはありません。
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