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

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

另外,由于我的连接是负载平衡的,因此可能会使用一个以上的公用IP地址,具体取决于是否使用ICMP,UDP或TCP(例如,始终traceroute -P UDPtraceroute -P ICMP返回不同的结果),和/或取决于源IP地址和目标IP地址。

我可以完成这样的操作的最短的UNIX shell代码是什么?

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

说明

我们可以使用GNU Parallel来混合搭配此处所涉及的几个命令和选项。

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

由于结果可能包含许多重复项(即,如果缺少IPv6或UDP,TCP并更改dst-addr返回相同的结果),我们将使用sort和{{3 }}。

看来+tcp-4uniq的定位也可能会以不同的方式处理-如果定位在-6之前的dig之后,那么它就被强制执行了;如果位于@指定符之后和/或位于命令行末尾,则将其作为软性要求强制执行(如果缺少IPv6,将使用IPv4);下面的代码段将其作为一个软要求,以避免必须执行错误处理。

解决方案

这是完整的解决方案:

@

以下是与单行相同的代码段:

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

以下是同一行内联代码段:

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

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

  • whois -A

测试

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

"whois -r"
本文链接:https://www.f2er.com/2919926.html

大家都在问