我确信之前已经有人问过并回答过这个问题,但我无法找到它,所以希望这至少可以将某人链接到正确的地方。
我想找出用于访问特定主机的本地接口和 IP 地址。例如,如果我的盒子上连接了 3 个适配器,并且它们都连接到不同的网络,我想知道这三个适配器中的哪一个(具体来说,是它的 IP 地址)用于访问 my.local.intranet(在本例中,它将是一个 vpn 隧道接口)。我怀疑这是 ifconfig 或 traceroute 的工作,但我找不到正确的交换机。
我正在运行 OSX 10.7 (Darwin)
编辑:为了方便访问,这就是我最终写下的内容以完成这个技巧:
ifconfig `route get <host> | grep "interface: " | sed "s/[^:]*: \(.*\)/\1/"` | grep "inet " | sed "s/.*inet \([0-9.]*\) .*/\1/"
欢迎任何改进/优化。
答案1
您可以尝试“路由”来打印您的路由表,它将显示您的各种接口的目标网络和网关。
如果 IP 地址无法帮助您轻松确定接口,请运行“traceroute”,运行路由后,查看第一跳并将其与“路由”中关联的网关进行比较,瞧 - 这就是您的接口。
#route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
145.67.4.0 switch47 255.255.255.0 U 0 0 eth0
192.168.1.0 localrouter 255.255.255.0 U 0 0 eth1
#traceroute <destination>
1 switch47.ba.foo.com (145.67.4.1) 0.5 ms .....
2 xxxxx.xxx.xxxx (xxx.xxx.xxx.xxx) 0.Xms. ...
答案2
路线-n获取www.yahoo.com
我正在运行 os x 10.6.8
答案3
您可以使用它ip route get
来查找并输出用于指定目的地的路由。输出应包括接口和源地址。
% ip route get 8.8.8.8
8.8.8.8 via 172.16.4.1 dev eth1 src 172.16.4.36
答案4
我不确定这是否正确,但 netstat 可能可以做到这一点。它显示已建立连接的本地地址。
# netstat -nt
Proto Recv-Q Send-Q Local Address Foreign Address State
...
tcp 0 0 192.168.1.61:44114 64.34.119.101:80 ESTABLISHED
tcp 0 0 192.168.1.61:36036 107.21.205.201:80 ESTABLISHED