私のルーティングテーブルには、IPアドレスのリストを持つ長いルールセットがあります。 CSVデータに似た出力を得たいです。ここで、最初の列は元のリストのIPアドレスであり、2番目の列はルーティングテーブルの現在のルールに基づいてそのIPに接続するために使用されるゲートウェイです。 3番目の列は接続に使用されるデバイスです。
パスデータを取得してそれを行うためのスクリプトの作成を少し考えましたが、route -n
サブネット計算を実行する関数を考えると、この特定のホイールが発明されている可能性があり、すでにどこかに存在するという考えを消去することはできませんでした。に。
私が望むことをどのような命令で達成できるかを知っている人はいますか?
答え1
これを使用して、ip route get
コンピュータが IP にルーティングする方法を決定できます。したがって、ファイルにIPリストが1行に1つずつある場合は、次のことができます。
while read -r addr; do
gw="$(ip route get "$addr" | awk '/via/ {print $3}')"
if [[ -z $gw ]]; then
printf 'No route for %s\n' "$addr" >&2
else
printf '%s,%s\n' "$addr" "$gw"
fi
done < ip_list
こんな、開発者を提供するのを忘れてしまいました。回避策は次のとおりです。
while read -r addr; do
ip route get "$addr" | awk -va="$addr" '/via/ {print a "," $3 "," $5} $2 == "dev" {print a ",," $3}'
done < ip_list