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

时间:2012-12-27 10:27:07

标签: tcl

我的电脑有多个网络接口。我想只配置eth0作为udp发送器,用于将数据包发送到其他PC。我们如何指定要配置为udp sender的接口名称。我已经安装了libudp-tcl,但无法找到方法。任何人都可以告诉我这样做的确切方法。

2 个答案:

答案 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