web-dev-qa-db-ja.com

Linuxルーティングテーブルの宛先への*すべての* IPルートを一覧表示します

ip route get 2607:f8b0:4005:804::200egoogle.comへの最良の(最長プレフィックス)ルートを表示しますが、そこに到達できるallルートは表示されません。

現在、私はip -6 route show | grep 2607:f8b0:を使用しています。これにより、正しいルートが出力されますが、その/ 32内の他のすべてのルートも出力されます。

より良い方法が必要です。

3
Navin

Linuxですべてのルートmatchigプレフィックスを一覧表示する簡単な方法があります。

ip -6 route list match 2607:f8b0:4005:804::200e table all

これにより、指定されたターゲットへのすべての可能なルート(具体的なものが見つからない場合のデフォルトを含む)がすべてのテーブルに一覧表示されます。明らかに、これはIPv4でも機能します。

PS:私の答えは少し遅すぎることを知っています、そしておそらくあなたはすでにこれを自分で理解しているでしょう、しかしそれにもかかわらず-この質問に答える人は誰でもそれが役立つと思うかもしれません:)

7
aldem

私がこの権利を解釈している場合は、特定のipv6アドレス(google.com)がルーティングテーブルエントリ(ネットワーク/ネットマスク)に含まれているかどうかを確認し、含まれている場合はルートを印刷します。

もしそうなら、それから:

  1. Google.comのipv6アドレスを取得します。例: _Host -t aaaa_で

  2. すべてのipv6ルートのリストを取得します。例えば_ip -6 route show_で。または、ルーティングデーモンにリストを照会します。

  3. 各ipv6ルートについて、google.comのipv6アドレスがそのネットワークとネットマスク内に含まれているかどうかを確認します。

Perl _Net::CIDR_モジュールには、IPアドレスがネットブロック(またはネットブロックの配列)にあるかどうかを確認するためのcidrlookup()関数があります。ipv4アドレスとipv6アドレスの両方で機能します。 PerlにはDNSルックアップを実行するための_Net::DNS_モジュールもあり、おそらくさまざまなルーター/ルーティングデーモンからルーティングテーブルをフェッチするためのモジュールがあります-Perlにはモジュール(または2つまたは1ダース)があります)あなたが考えることができるほとんどすべてをすること。とにかく、_ip -6 route show_の出力から必要なものを抽出するのは簡単です。

注:これは、ターゲットIPを含むネットワーク/マスクのルーティングテーブルに特定のルートがある場合にのみ一致を検索します。もちろん、「デフォルト」ルートにはすべてのIPが含まれています。

Perlを使用したくない場合は、 libcidr もあります。自分で書くのはそれほど難しいことではありません(または誰かがすでに書いているかもしれません)。

0
cas