Linux:如何基于目标端口路由到接口?

时间:2016-07-20 20:13:05

标签: linux interface routes port iptables

我有一个脚本可以进行很多Whois查询。如果我只使用一个界面,我将被禁止。但我有eth1和eth1:0到eth1:13,所以有15个ip地址来轮换这些查询。

如何调用whois命令以便指定它将用于查询的接口?

我见过this post但是我无法添加路由表,因为我的接口已经有了用于指定网关的路由。

e.g。 route add -net x.x.x.32 / 29 gw x.x.X.33 dev eth1

所以我的计划是以某种方式改变目标端口43的路由,然后进行查询,然后删除该路由,设置另一个,进行其他查询等。有点像这样:

route add -port 43 dev eth1
whois example.com
route del -port 43 dev eth1

route add -port 43 dev eth1:0
whois example.org
route del -port 43 dev eth1:0

route add -port 43 dev eth1:1
whois example.net
route del -port 43 dev eth1:1
...
WARNING: -port does not work indeed.

那么,在不弄乱服务器其余流量的情况下,实现这一目标的最简单方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我回答了我自己的问题。

这不是一个适用于除了whois之外的所有其他事情的解决方案,但它可以为许多协议提供技巧。

使用CURL进行查询,因为curl有一个Interface选项。

当然,你需要有一个像this one这样的whois服务器列表。

e.g。在perl:

use WWW::Curl::Easy;
my $curl = WWW::Curl::Easy->new;
$curl->setopt(CURLOPT_URL, "whois.crsnic.net:43");
$curl->setopt(CURLOPT_INTERFACE, "1.2.3.4");
$curl->setopt(CURLOPT_CUSTOMREQUEST, "example.com\r\n");
my $curldata = "";
$curl->setopt(CURLOPT_WRITEDATA, \$curldata);
$curl->perform;
print("$curldata\n");

然后你可以解析$ curldata以找到瘦的whois服务器以及它上面的相同内容。