根据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
只是需要根据您的需要进行一些调整。
根据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
只是需要根据您的需要进行一些调整。