如何在tcl中将eth0配置为发送端udp端口



我的电脑有多个网络接口。我想配置只有eth0作为udp发送器发送数据包到其他pc。如何指定要配置为udp发送方的接口名称?我已经安装了libup -tcl,但是找不到安装的方法。有人能告诉我具体怎么做吗?

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

也可以在tcl中使用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

根据我的收集,要做你想做的事情,你需要首先将bind(2)到特定的IP地址(eth0上可用的IP地址之一),但是udp包似乎不支持这样的事情。

所以看起来你需要自己打补丁。Tcl有优秀的C API,所以如果你熟悉C语言,这并不难。

最新更新