Lista de verificação de IPs em relação à tabela de roteamento e mostra qual gw / dev é acessado por meio de

1

Eu tenho um longo conjunto de regras (ish) na minha tabela de roteamento e uma lista de endereços IP. Eu estou olhando para acabar com a saída como dados CSV, com a primeira coluna sendo os endereços IP da lista original, a segunda coluna sendo o gateway que seria usado para se conectar a esse IP com base nas regras atualmente na tabela de roteamento e a terceira coluna é o dispositivo que seria usado para se conectar.

Pensei brevemente em criar um script para obter os dados de roteamento de route -n e fazer isso, mas no meio de pensar em uma função para fazer a matemática da sub-rede não pude deixar de pensar que essa roda em particular provavelmente já foi inventado e está lá fora em algum lugar.

Alguém sabe que comandos podem fazer o que eu estou procurando?

    
por Blair 20.09.2016 / 13:57

1 resposta

3

Você pode usar ip route get para descobrir como sua máquina seria encaminhada para um IP. Então, se você tem uma lista de IPs em um arquivo, um por linha que você poderia fazer

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

Opa, esqueci de incluir o desenvolvedor para você, então aqui está uma solução para isso

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
    
por 20.09.2016 / 14:02