【问题标题】:Linux : How to route to interface based on destination port?Linux:如何根据目标端口路由到接口?
【发布时间】:2016-07-20 20:13:04
【问题描述】:

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

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

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

例如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.

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

谢谢!

【问题讨论】:

  • 您链接到的问题解释了如何使用iptables,而不是route add。你试过吗?
  • “如果我只使用一个界面,我将被禁止”。您假设服务运营商不够聪明,无法涵盖更多案例。您尝试做的事情最终可能会导致您的整个域被禁止。
  • @Barmar :好吧,这显然是两者的结合,但由于我解释的原因,我确实尝试过并且无法添加路线。 kaylum:题外话,请不要拖钓或争论。谢谢。

标签: linux interface routes port iptables


【解决方案1】:

好的,所以我回答我自己的问题。

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

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

当然,您需要有一个 whois 服务器列表,例如this one

例如在 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服务器并在上面找到相同的东西。

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多