2

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

4

2 回答 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 回答