【发布时间】:2011-04-22 13:25:24
【问题描述】:
在我的 linux 机器上,3 个网络接口中的 1 个可能实际连接到 Internet。我需要获取当前连接的接口的 IP 地址,记住我的其他 2 个接口可能分配了 IP 地址,只是没有连接。
我可以通过我的每个接口 ping 一个网站以确定哪个接口具有连接性,但我希望比等待 ping 超时更快地获得这个。而且我希望不必依赖外部网站正在运行。
更新:
我所有的接口都可能有 IP 地址和网关。这适用于嵌入式设备。所以我们允许用户在eth0 和eth1 之间进行选择。但如果用户告诉我们使用的界面上没有任何连接,我们会退回说eth2,这(理论上)将始终有效。
所以我需要做的是首先检查用户的选择是否已连接,如果是则返回该 IP。否则我需要得到eth2的ip。我可以很好地获取接口的 IP,它只是确定实际连接的是哪个接口。
【问题讨论】:
-
什么将接口归类为“关闭”?它不会有网关吗?会不会有网关,但是网关不可达?
-
您真的无法仅通过查看 IP 来确定路由。不止一个接口可以路由到互联网(例如有线和无线)。它们中没有一个可以(直接)路由到互联网,但可能在处理某些流量的路径中有代理。
-
除非您使用 ICMP、TCP/IP、UDP 等与 Internet 中的某个服务器建立连接,否则不存在与 Internet 的连接。除非您与某些服务交谈并获得回复,否则您不能说您已连接到 Internet。
-
我认为你在这里使用了错误的工具——如果你有三个到互联网的连接,你通常会通过绑定连接来解决这个问题,这样你的最快连接服务首先请求并且作为它耗尽了您溢出到其他接口的带宽。如果任何接口死机,您会自动卸载到剩余的接口。如果您阅读 iptables/routing linux 文档,您会发现比每隔几分钟尝试测试一次(如果您仍然“启动”)更可靠的解决方案。
-
这不是我们正在做的。我们的 eth2 是一个 ppp 连接,只有在其他 2 个没有启动时才应该使用它。
标签: python linux networking ip-address