監視の目的で、モバイル戦士のUNIXボックスのすべてのパブリックIPv4アドレスとIPv6アドレスを調べたいと思います。
これは シェルスクリプトでパブリックIPアドレスを検索する とは異なります。これは、次の追加要件があるためです。
DNS経由のパブリックIPアドレスDig
(BINDのDNSルックアップユーティリティ)を使用して、両方のUDPを試すことができます(+notcp
オプション)およびTCP(+tcp
オプション)、ICMPのみを残します。ただし、これらすべてのクエリを複数の独立した宛先IPv4およびIPv6アドレスに送信して、接続の負荷分散が行われ、より固有の応答が返される可能性が高くなります。
Dig
を指定した-4
および-6
オプションの配置も、引数の順序に応じて異なる方法で処理される可能性があります—正しく配置されている場合Dig
の後、@
指定子の前、それはハード要件として強制されます。 @
指定子を超えて、および/または最後の引数として配置されている場合、ソフト要件として適用されます(IPv6接続がない場合はIPv4が使用されます)。以下のスニペットでは、エラー処理を実装する必要がないようにするためのソフト要件として使用しています。
GNU Parallel を使用して、ここで問題となっているいくつかのコマンドとオプションを組み合わせることができます。
これが完全な解決策です:
parallel -kj16 Dig -t txt o-o.myaddr.l.google.com +short \
::: @ns{1,2,3,4}.google.com ::: -4 -6 ::: +notcp +tcp
これは、1行と同じスニペットです。
parallel -kj16 Dig -t txt o-o.myaddr.l.google.com +short ::: @ns{1,2,3,4}.google.com ::: -4 -6 ::: +notcp +tcp
これは同じスニペットSO inline:
parallel -kj16 Dig -t txt o-o.myaddr.l.google.com +short ::: @ns{1,2,3,4}.google.com ::: -4 -6 ::: +notcp +tcp
上記の parallel
の呼び出しがどのように機能するかを示します。
% parallel -k echo Dig -t txt o-o.myaddr.l.google.com +short \
? ::: @ns{1,2,3,4}.google.com ::: -4 -6 ::: +notcp +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns1.google.com -4 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns1.google.com -4 +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns1.google.com -6 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns1.google.com -6 +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns2.google.com -4 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns2.google.com -4 +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns2.google.com -6 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns2.google.com -6 +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns3.google.com -4 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns3.google.com -4 +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns3.google.com -6 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns3.google.com -6 +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns4.google.com -4 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns4.google.com -4 +tcp
Dig -t txt o-o.myaddr.l.google.com +short @ns4.google.com -6 +notcp
Dig -t txt o-o.myaddr.l.google.com +short @ns4.google.com -6 +tcp
%
上記のソリューションを拡張するには、以下を使用して、見つかったすべてのアドレスに対してwhoisおよびrDNSルックアップを実行できます。 IPv6ルックアップをBSDおよびmacOSで機能させるには、ARINの場合は-a
、APNICの場合は-A
、RIPEの場合は-r
を whois
:
parallel -kj16 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 -a" :::: /dev/stdin