Linux:从C代码如何检测哪个eth接口访问WAN?

Linux:从C代码如何检测哪个eth接口访问WAN?,c,linux,networking,routes,upnp,C,Linux,Networking,Routes,Upnp,环境: C代码,Linux 什么: 我想使用UPNP for SSH协议在路由器上打开一个端口。 我知道如何使用miniupnpc库来完成它。 我可以发送UPNP请求,该请求包括: 要从中重定向的外部端口 要重定向到的内部端口 接受SSH通信的内部计算机地址 问题: 如果内部机器有多个eth接口,如何找到正确的接口 例如: 假设我有: eth0, address 10.10.10.1 [WAN connection] eth1, address 20.20.20.1 [No WAN connec

环境: C代码,Linux

什么: 我想使用UPNP for SSH协议在路由器上打开一个端口。 我知道如何使用miniupnpc库来完成它。 我可以发送UPNP请求,该请求包括: 要从中重定向的外部端口 要重定向到的内部端口 接受SSH通信的内部计算机地址

问题: 如果内部机器有多个eth接口,如何找到正确的接口

例如: 假设我有:

eth0, address 10.10.10.1 [WAN connection]
eth1, address 20.20.20.1 [No WAN connection]
eth0是连接到路由器的接口,具有广域网访问权限。 eth1是连接到内部网络的接口,无法访问广域网

发送UPNP请求时,其应包含:

External port: 2222
Internal port: 22
Local machine address: 10.10.10.1 [eth0]
问题是:

如何从C代码中检测哪个接口访问WAN? 我不应该运行外部脚本,只运行C代码。
外部库的使用还可以。

我想您必须通过读取/proc/net/route的内容来检测哪个接口分配了默认网关(仅限零),或者使用netlink接口也可以这样做


您可能希望将套接字(AF_NETLINK、SOCK_RAW、NETLINK_ROUTE)与RTM_GETROUTE类型的请求一起使用。可以在以下位置找到完整的示例,例如:。代码可能会以某种方式减少使用。还可以在上找到一些详细信息。

我想您必须通过读取/proc/net/route的内容来检测哪个接口分配了默认网关(仅限零),或者使用netlink接口也可以这样做


您可能希望将套接字(AF_NETLINK、SOCK_RAW、NETLINK_ROUTE)与RTM_GETROUTE类型的请求一起使用。可以在以下位置找到完整的示例,例如:。代码可能会以某种方式减少使用。有关详细信息,请访问。

谢谢。这就是我需要的。谢谢。这就是我需要的。