假设我有一个文件描述符socket(2)
,我已经connect(2)
对它做了一个 - 以后有什么方法可以确定(从正在运行的程序内部)哪个网络设备可能正在用于底层传输?对 fd的调用stat(2)
给出设备号 0;ioctl(2)
或getsockopt(2)
选项似乎都不适用。
问问题
312 次
2 回答
1
这样做没有万无一失的方法——当然不是符合 posix 的方法。
但是,在实践中,您可以在 99% 的时间内轻松确定接口。完成后connect
,使用getsockname
获取 IP 地址,然后查看框上的可用接口列表以查找具有匹配 IP 地址的接口。
于 2016-08-23T15:33:46.343 回答
0
从accept
通话中,您应该能够获得远程客户端的 IP 地址(在 Beej 上可以看到)。假设您没有任何非对称路由,您可以在本地路由表中查找到该地址的路由。路由表应该告诉您使用什么以太网设备将数据包发送到远程客户端。
编辑:
您可以使用以下命令行工具使用远程客户端的地址查询本地路由表:
ip route get <remote-client-ip-addr>
于 2016-08-23T15:31:02.810 回答