我可以找到处理我的套接字的网络接口/设备吗?

时间:2016-08-23 15:16:05

标签: sockets posix ioctl getsockopt

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

2 个答案:

答案 0 :(得分:1)

There's no foolproof way to do so -- certainly not a posix-compliant way.

However, in practice, you can easily determine the interface 99% of the time. After you've done the connect, use getsockname to obtain the IP address, then look through the list of available interfaces on the box for one with a matching IP address.

答案 1 :(得分:0)

accept电话中,您应该可以获取远程客户端的IP地址(在Beej上看到here)。假设您没有任何非对称路由,则可以在本地路由表中查找到该地址的路由。路由表应该告诉您使用什么以太网设备将数据包发送到远程客户端。

编辑:

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

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