根据Linux上的IP获取socket要使用的接口,用C/C++

Get the interface to be used by socket according to IP on Linux, with C/C++

根据this answer,如果在调用connect时指定了目标地址,系统将自动选择套接字使用的接口。我正在寻找的是一种在使用 C 或 C++ 调用 connect 之前了解该接口名称的简单方法。我知道这可以用命令 route get to $ADDR 来完成,但是在程序中调用外部命令似乎有点脏。除了解析路由 table 或调用 route 之外,在 C/C++ 中有什么方法可以做到这一点?

您可以打开一个 netlink 套接字并查询路由,然后过滤您需要的路由。 Linux 期刊上有一篇文章描述了这种方法:

https://www.linuxjournal.com/article/7356

这里是它的 C 实现:

https://gist.github.com/javiermon/6272065

只是需要根据您的需要进行一些调整。