Проверьте список IP-адресов в таблице маршрутизации и покажите, к какому gw / dev

У меня есть длинный (ish) набор правил в моей таблице маршрутизации и список ipадресов. Я ищу, чтобы получить результат, такой как CSV-данные, причем первый столбец является ip-адресами из исходного списка, а второй столбец является шлюзом, который будет использоваться для подключения к этому IP-адресу на основе правил, находящихся в настоящее время в таблице маршрутизации , а третий столбец – это устройство, которое будет использоваться для соединения.

Я вкратце подумал о том, чтобы собрать сценарий, чтобы получить данные маршрутизации с route -n и сделать это, но частично, выработав функцию для выполнения математики подсети, я не мог не думать о том, что это конкретное колесо уже было изобретено и где-то там.

  • Адаптер Virtualbox NAT + Host-Only
  • Может ли DNS идентифицировать имена хостов динамически, если они статически настроены?
  • Статический маршрут в Centos 6
  • Для маршрутизации пользователей на Wi-Fi
  • ipsec rightsubnet для широкого, не может переопределить таблицу маршрутизации | IPSec маршрутизирует некоторые пакеты «локально», а не через туннель; ip xfrm изменить?
  • Настройка мостового адаптера Ethernet в гостевой системе VirtualBox под управлением Scientific Linux
  • Кто-нибудь знает, какие команды могут делать то, что мне нужно?

  • IPv6 через TCP или TCP6
  • Альтернатива mrouted для DVMRP на Squeeze Debian
  • dyndns на веб-сервере заставляет маршрутизатор отключать
  • LAN-сервер с двумя сетевыми картами, не может telnet / ping ко второму, даже если он работает
  • Есть ли команда, запрещающая IP-адрес
  • Linux Сетевая маршрутизация на виртуальные IP-адреса из другой подсети
  • One Solution collect form web for “Проверьте список IP-адресов в таблице маршрутизации и покажите, к какому gw / dev”

    Вы можете использовать ip route get чтобы выяснить, как ваша машина будет маршрутизироваться на IP-адрес. Поэтому, если у вас есть список IP-адресов в файле, по одному на строку, которую вы могли бы сделать

     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 

    К сожалению, я забыл включить dev для вас, так что вот решение для этого

     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 
    Linux и Unix - лучшая ОС в мире.