Suchen Sie die Schnittstelle für die Route zu einem bestimmten Host

13

Wie kann ich auf einem Multihomed-Linux-Computer herausfinden, über welche Netzwerkschnittstelle ein Paket an einen bestimmten Host gesendet wird? Ich muss dies programmgesteuert ausführen, und ich möchte die Routing-Tabelle lieber nicht selbst analysieren und interpretieren.

Rob H
quelle
Dafür ist die Routing-Tabelle gedacht. Ich kann es mir nicht anders vorstellen.
GioMac

Antworten:

28

Verwenden Sie ip routedafür. Zum Beispiel:

ip route show to match 198.252.206.16
Michael Hampton
quelle
Perfekt! Vielen Dank.
Rob H
9

Kürzere Option:

ip route get 172.29.42.94
Alexey
quelle
4

Ja, wie Michael Hampton vorschlägt, benutze ip route. Wenn Sie nur die Schnittstelle möchten, verwenden Sie diese

ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}'

Beispielsweise:

# ip=8.8.8.8
# iface=$( ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}' )
# echo $iface
eth1
mivk
quelle