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

问题描述 投票:0回答:1

环境:C代码,Linux

什么:我想在使用UPNP的SSH协议的路由器上打开端口。我知道如何使用miniupnpc库做到这一点。我可以发送UPNP请求,该请求包括:外部端口重定向内部端口重定向到接受SSH流量的内部计算机地址。

问题:如果内部计算机具有多个eth接口,如何找到合适的接口?

例如:说我有:

eth0, address 10.10.10.1 [WAN connection]
eth1, address 20.20.20.1 [No WAN connection]

eth0是连接到路由器的接口,可以访问WAN。eth1是连接到内部网络的接口,无法访问WAN。

发送UPNP请求时,应包含:

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

问题:

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

c linux networking routes upnp
1个回答
1
投票

我想您必须通过读取/ proc / net / route的内容来检测哪个接口已分配了默认网关(仅零),或者可以使用netlink接口来完成此操作。

您可能要对类型为RTM_GETROUTE的请求使用socket(AF_NETLINK,SOCK_RAW,NETLINK_ROUTE)。可以在例如oleg's blog找到很好的完整示例。使用libnl可能会以某种方式减少代码。一些细节也可以在linuxfoundation's web上找到。

© www.soinside.com 2019 - 2024. All rights reserved.