使用C/C++,在Linux上根据IP获取套接字使用的接口



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

您可以打开一个netlink套接字并查询路由,然后筛选所需的路由。下面是Linux期刊上的一篇文章,描述了这种方法:

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

这里有一个在C中的实现:

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

它只需要根据您的需要进行一点调整。

最新更新