环境:C代码,Linux
内容:我想使用用于SSH协议的UPNP在路由器上打开一个端口。我知道如何使用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代码中检测到哪个接口访问广域网?我不应该运行外部脚本,只运行C代码。外部库的使用是可以的。
发布于 2020-04-26 16:08:59
我猜您必须通过读取/proc/net/ same的内容来检测哪个接口分配了默认网关(仅为零),或者使用netlink接口可以完成相同的操作。
您可能希望使用套接字(AF_NETLINK、SOCK_RAW、NETLINK_ROUTE)和RTM_GETROUTE类型的请求。很好的完整的例子可以在例如:奥列格博客找到。使用利卜勒可以以某种方式减少代码。一些细节也可以在linuxfoundation网站上找到。
https://stackoverflow.com/questions/61440923
复制相似问题