在UNIX主机的所有公共IPv4和IPv6地址上运行`whois`和`host`

问题描述 投票:0回答:1

在UNIX shell中,我想编写脚本以获取网关的所有公共IPv4和IPv6地址,将其打印回去,然后在所有找到的地址上同时运行whoiswhois

[另外,由于我的连接是负载平衡的,因此取决于使用的是ICMP,UDP还是TCP,公共IP地址可能不止一个(例如,hosthost始终返回不同的结果),和/或取决于源IP地址和目标IP地址。

什么是最短的UNIX shell代码片段,我可以用它完成类似的工作?

shell ip-address xargs gnu-parallel dig
1个回答
0
投票

说明

我们可以使用traceroute -P UDP来混合和匹配这里有问题的几个命令和选项。

我们可以使用traceroute -P ICMP(来自BIND的DNS查找实用程序)来确定GNU Parallel,这使我们可以尝试UDP(使用public IP address through DNS选项)和TCP(dig选项),而仅留下ICMP 。但是,我们可以尝试将所有这些查询发送到多个独立的目标IPv4和IPv6地址,从而更可能发生连接的负载平衡,并按预期返回更多唯一响应。

由于结果可能包含许多重复项(即,如果缺少IPv6或UDP,TCP并改变dst-addr返回相同的结果,我们将使用dig+notcp消除这些重复。

[似乎+tcpsortsort的位置也可能会以不同的方式处理-如果将uniq放在uniq规范符之前,然后强制执行;如果位于-4说明符之后和/或位于命令行末尾,则将其作为软性要求强制执行(如果缺少IPv6,将使用IPv4);下面的代码片段将其用作一个软要求,以避免必须执行错误处理。

解决方案

这是完整的解决方案:

-6

与同一行的代码段相同:

dig

这里是同一行内联代码段:

  • dig

请注意,根据系统中的dig,可能必须将@更改为@(对于ARIN),parallel -k dig -t txt o-o.myaddr.l.google.com +short \ ::: @ns{1,2,3,4}.google.com ::: -4 -6 ::: +notcp +tcp \ | sort -n | uniq \ | parallel -vk ::: "echo" "host" "whois" :::: /dev/stdin (对于APNIC)或parallel -k dig -t txt o-o.myaddr.l.google.com +short ::: @ns{1,2,3,4}.google.com ::: -4 -6 ::: +notcp +tcp | sort -n | uniq | parallel -vk ::: "echo" "host" "whois" :::: /dev/stdin (对于RIPE),以确保将对IPv6地址的whois请求发送到正确的位置;这就是为什么我在上面的片段中使用引号的原因:

  • parallel -k dig -t txt o-o.myaddr.l.google.com +short ::: @ns{1,2,3,4}.google.com ::: -4 -6 ::: +notcp +tcp | sort -n | uniq | parallel -vk ::: "echo" "host" "whois" :::: /dev/stdin

测试

这是上述两个whois调用要完成的工作的演示:

whois
© www.soinside.com 2019 - 2024. All rights reserved.