gethostbyname 双网络接口,选择使用哪一个

2024-01-02

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

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

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

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

struct hostent *remoteHostEnt = gethostbyname(hostName);

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

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


您可以使用特定网络接口进行 DNS 查询c-ares http://c-ares.haxx.se/(如图所示c-ares 指定 DNS 解析的网络接口 https://stackoverflow.com/questions/7611544/c-ares-specifying-network-interface-for-the-dns-resolves).

有一个 c-ares 示例如何使用 c-ares 将 IP 解析为主机? https://stackoverflow.com/questions/4854284/how-do-i-resolve-an-ip-into-host-using-c-ares.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gethostbyname 双网络接口,选择使用哪一个 的相关文章

随机推荐