我能找到什么网络接口/设备正在处理我的套接字吗?



假设我有一个来自socket(2)的文件描述符,并且我已经在它上面做了一个connect(2) -以后是否有任何方法来确定(从运行的程序内部)底层传输可能使用什么网络设备?对fd上的stat(2)的调用给出了设备号0;ioctl(2)getsockopt(2)选项似乎都不适用。

没有万无一失的方法——当然不是posix兼容的方法。

然而,在实践中,99%的情况下您可以轻松地确定接口。在完成connect之后,使用getsockname获得IP地址,然后在盒子上的可用接口列表中查找具有匹配IP地址的接口。

accept调用中,您应该能够获得远程客户端的ip地址(在Beej's上看到)。假设您没有任何非对称路由,您可以在本地路由表中查找到该地址的路由。路由表应该告诉您用于向远程客户机发送数据包的以太网设备。

编辑:

您可以使用以下命令行工具使用远程客户端的地址查询本地路由表:

ip route get <remote-client-ip-addr>

相关内容

  • 没有找到相关文章

最新更新