我的电脑有多个网络接口。我只想将 eth0 配置为 udp 发送方,以便将数据包发送到其他电脑。我们如何指定要配置为 udp 发送方的接口名称。我已经安装了 libudp-tcl,但找不到方法。谁能告诉我这样做的确切方法。
问问题
319 次
2 回答
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 在 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 回答
0
从我收集的信息来看,要执行您想要的操作,您首先需要bind(2)
到一个特定的 IP 地址(其中一个可用的eth0
),但该udp
软件包似乎不支持这样的任何东西。
所以看起来你需要自己修补包。Tcl 具有出色的 C API,因此如果您熟悉 C,这并不难。
于 2012-12-27T14:32:42.397 回答