我的电脑有多个网络接口。我想只配置eth0作为udp发送器,用于将数据包发送到其他PC。我们如何指定要配置为udp sender的接口名称。我已经安装了libudp-tcl,但无法找到方法。任何人都可以告诉我这样做的确切方法。
答案 0 :(得分:0)
从I gather开始,要做到你想要的,你需要先bind(2)
到特定的IP地址(eth0
上可用的地址之一),但是{{1} } package does not appear to support anything like this。
所以看起来你需要自己修补包。 Tcl拥有出色的C API,所以如果你熟悉C语言并不是很难。
答案 1 :(得分:0)
udp包不能做你想做的事。正如kostix所提到的,你总是可以修改C级别的udp包,以便将绑定接口暴露给tcl。
但是还有另一种解决办法。
在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在 但请务必在程序退出前删除添加的规则:# 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