4

我有一个需要连接到服务器并发送 tcp 有效负载并等待响应的 c 程序。这适用于正常使用,但由于我有两个不同的网络接口,让我们在运行程序的计算机上调用它们 if0 和 if1,有时其中一个网络接口无法转发流量。不幸的是,这是我无法改变的事实。

由于操作系统无法帮助我将数据路由到正确的接口,因此为了优雅地处理此问题,我使用 if0 和 if1 发送有效负载。我创建了一个套接字,并使用 bind 将套接字绑定到特定接口,我对 if0 和 if1 都这样做。

不幸的是,这并没有按我的计划工作,因为我用来解析主机名的 gethostbyname 当然只使用了一个接口。不幸的是,我无法在这个特定问题上更改操作系统配置,我需要绕过操作系统中的任何逻辑并确保流量进入特定接口。

我有以下用于地址查找的代码:

struct hostent *remoteHostEnt = gethostbyname(hostName);

有什么方法可以让我使用特定的接口来制作 gethostbyname 吗?我想尝试使用 gethostbyname 同时使用 if0 和 if1 并使用任何可接受的结果。

我是否需要制作自己的 DNS 查找实现并为此使用套接字,或者我可以使用 posix c 中的某些东西?或者也许有一个我可以使用的图书馆?

4

2 回答 2

3

您可以使用c-ares对特定网络接口进行 DNS 查询(如c-ares 为 DNS 解析指定网络接口中所示)。

How do I resolve an IP into host using c-ares中有一个 c-ares 示例?.

于 2015-11-25T14:43:17.870 回答
0

如果您无法更改系统配置,那么您几乎注定要在应用程序中实现自己的 DNS 解析器。您可以将代码基于ADNSPolipo 中包含的 DNS 解析器

于 2015-05-03T18:00:25.813 回答