将getaddrinfo绑定到特定接口(源IP)

时间:2016-10-28 18:19:30

标签: c linux networking dns client-server

我使用getaddrinfo()来获取与使用URL的服务器对应的IP地址。它基本上将DNS查询发送到DNS服务器。我希望能够从特定的出站接口发送该查询。基本上我有多个接口可以通过它发送DNS查询。目前,getaddrinfo()没有办法规定应该使用哪个接口发送DNS查询。是改变getaddrinfo()例程的唯一选择吗?有没有人知道有任何其他方法来实现这一目标?

2 个答案:

答案 0 :(得分:0)

选择用于访问给定IP地址的接口由路由表决定。

由于您可能拥有DNS服务器的IP,因此无论哪个应用程序发送请求,都可以通过路由表用于该IP地址的任何接口访问它。

您需要修改路由表以强制通过特定接口进行通信。如果它只是应该使用固定接口的DNS服务器,您可以将该特定IP的路由添加到所需接口的路由表中。

在Linux上,您可以通过ip route命令行工具修改路由表。

答案 1 :(得分:0)

问题的根本问题在于,您似乎希望getaddrinfo仅与DNS一起使用,然后才能微调该DNS查找的细节。但是,这不是它的作用 - 它将使用系统上的所有名称解析工具,这通常意味着它将执行hosts文件查找,以及nsswitch.conf中配置的任何其他内容,通常是DNS。对于其中一些非DNS查找,源地址绑定可能没有任何意义,因此它不是最小公分母接口的一部分。

如果您知道出于特定目的,您将永远不需要从DNS以外的任何地方进行名称查找的响应,那么您可以使用特定于DNS的功能,这将使您能够执行此类罚款 - 调谐。

gethostbyname dual network interfaces, select which one to use

列出了几个DNS C库的示例