![curl 忽略接口参数](https://linux22.com/image/51485/curl%20%E5%BF%BD%E7%95%A5%E6%8E%A5%E5%8F%A3%E5%8F%82%E6%95%B0.png)
我的 Ubuntu 12.04 笔记本电脑通过 WiFi 连接到 Internet,并通过电缆连接到 Intranet。
我想通过curl
以下方式获取 Intranet 站点的内容:
curl --interface eth0:1 intranet.bfs.admin.ch
结果是
curl: (6) Couldn't resolve host 'intranet.bfs.admin.ch'
当我断开 WiFi 时,它工作正常
根据手册页,这应该可行。我也尝试过(没用)
curl --interface eth0:0 intranet.bfs.admin.ch
curl --interface eth0 intranet.bfs.admin.ch
curl --interface 10.147.128.132 intranet.bfs.admin.ch
我应该提到的是,将 WiFi 保留为默认接口非常重要。
答案1
我相信您在这里看到的是,当无线接口启动时,它会通过 DHCP 获取其配置,其中包括覆盖您的 Intranet DNS 配置的 DNS 配置。
强制curl
使用特定的网络接口并不能帮助您解决此问题。curl
它不执行自己的 DNS 操作(这是底层操作系统的功能),即使执行此操作,简单地强制它通过有线连接将数据包发送到 WLAN DNS 服务器也不会做任何有用的事情。
有很多方法可以解决这个问题。
我可能首先尝试的方法是将 Intranet 的 DNS 服务器添加到 WLAN DHCP 配置中,将它们设置为比您通常使用的 Internet DNS 服务器更高的优先级。您甚至可以完全放弃 Internet DNS 服务器,因为内联网DNS 服务器可能也已经知道如何进行 Internet DNS 查找。除了解析本地 DNS 名称之外,您还可以有效地使用本地 Intranet DNS 服务器作为 Internet 查找的缓存 DNS 服务器。
如果您无法控制 WLAN DHCP 配置,您可以将 Ubuntu 的 DHCP 配置配置为使用静态 DNS 地址;它将忽略从 DHCP 获取的内容。将其设置为使用内网 DNS 服务器。