首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linux:从C代码中如何检测哪个eth接口访问广域网?

Linux:从C代码中如何检测哪个eth接口访问广域网?
EN

Stack Overflow用户
提问于 2020-04-26 12:38:12
回答 1查看 241关注 0票数 0

环境:C代码,Linux

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

问题:在内部机器有几个eth接口的情况下,如何找到正确的接口?

例如:假设我有:

代码语言:javascript
运行
复制
eth0, address 10.10.10.1 [WAN connection]
eth1, address 20.20.20.1 [No WAN connection]

eth0是连接到路由器的接口,具有广域网访问权限。eth1是连接到内部网络的接口,无法访问广域网。

当发送UPNP请求时,它应该包含:

代码语言:javascript
运行
复制
External port: 2222
Internal port: 22
Local machine address: 10.10.10.1 [eth0]

问题是:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-26 16:08:59

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

您可能希望使用套接字(AF_NETLINK、SOCK_RAW、NETLINK_ROUTE)和RTM_GETROUTE类型的请求。很好的完整的例子可以在例如:奥列格博客找到。使用利卜勒可以以某种方式减少代码。一些细节也可以在linuxfoundation网站上找到。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61440923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档