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

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

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

Кто-нибудь знает, какие команды могут делать то, что мне нужно?

  • DHCP для назначения разных адресов для нескольких интерфейсов и подсетей
  • Как найти IP-адрес устройства, подключенного к той же сети, что и ПК на основе идентификатора MAC
  • Как узнать, какая служба работает на конкретном порту в Linux?
  • Как настроить мостовую сеть с виртуальной машиной и хостом с KVM (Virt-Manager)?
  • Как вернуть ближайший DNS-IP на основе запроса IP-адреса клиента?
  • Маршрутизация для нескольких восходящих линий / поставщиков
  • Как решить Apache2 VirtualHosts?
  • Сервер Не принимает подключения TCP / 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 - лучшая ОС в мире.