On a multihomed Linux machine, how can I find out what network interface will be used to send a packet to a specific host? I need to do this programmatically and I'd rather not parse and interpret the routing table myself.
Asked
Active
Viewed 4.5k times
30
-
That's what routing table is for. I don't imagine it otherwise. – GioMac Aug 17 '13 at 18:02
3 Answers
51
Use ip route
for this. For instance:
ip route show to match 198.252.206.16

Michael Hampton
- 244,070
- 43
- 506
- 972
7
Yes, as Michael Hampton suggests, use ip route
. If you only want the interface, use this
ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}'
For example:
# ip=8.8.8.8
# iface=$( ip -o route get $ip | perl -nle 'if ( /dev\s+(\S+)/ ) {print $1}' )
# echo $iface
eth1

mivk
- 4,004
- 3
- 37
- 32