web-dev-qa-db-ja.com

UNIXシェルスクリプトですべてのパブリックIPv4およびIPv6アドレスを検索する

監視の目的で、モバイル戦士のUNIXボックスのすべてのパブリックIPv4アドレスとIPv6アドレスを調べたいと思います。

これは シェルスクリプトでパブリックIPアドレスを検索する とは異なります。これは、次の追加要件があるためです。

  • モバイル戦士自体はおそらくパブリックIPv4アドレスをまったく持っていません。
  • iPv6がある場合とない場合があります(ただし、実際の発信接続で使用されるアクティブなIPv6のみに関心があります)。
  • 基になるインターネット接続は負荷分散されている可能性があり、詳細は不明です。UDP、TCP、ICMP、および送信元/宛先IPアドレスの組み合わせによって、どのアップストリームが使用されるかが決まります。ゲートウェイ自体に直接アクセスすることなく、ゲートウェイの基本的なインターネット接続の全体像を把握するために、このようなIPアドレスをすべて見つけるために最善を尽くす必要があります。
5
cnst

説明

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
%

追伸GNU Parallelの詳細

上記のソリューションを拡張するには、以下を使用して、見つかったすべてのアドレスに対してwhoisおよびrDNSルックアップを実行できます。 IPv6ルックアップをBSDおよびmacOSで機能させるには、ARINの場合は-a、APNICの場合は-A、RIPEの場合は-rwhois

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

5
cnst