0

我的电脑有多个网络接口。我只想将 eth0 配置为 udp 发送方,以便将数据包发送到其他电脑。我们如何指定要配置为 udp 发送方的接口名称。我已经安装了 libudp-tcl,但找不到方法。谁能告诉我这样做的确切方法。

4

2 回答 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 回答