c++ - 在 Linux 中使用 C++ 检测连接的接口(interface)

标签 c++ linux networking tcp routing

我想检测现在连接的是哪个接口(interface);我有三个 3g 调制解调器连接和两个到服务器的 lan 连接(我的设备不支持 wlan)。我的意思是连接类型并不重要,但接口(interface)名称和细节对我来说很重要。我想检测我用 C++ 编写的程序中的连接接口(interface)。请告诉我如何在 C++ 中检测连接的接口(interface)?(root 权限不是问题。)

最佳答案

使用ioctl SIOCGIFFLAGS检查接口(interface)是否UP和RUNNING:

struct ifreq ifr;

memset( &ifr, 0, sizeof(ifr) );
strcpy( ifr.ifr_name, ifrname );

if( ioctl( dummy_fd, SIOCGIFFLAGS, &ifr ) != -1 )
{
    up_and_running = (ifr.ifr_flags & ( IFF_UP | IFF_RUNNING )) == ( IFF_UP | IFF_RUNNING );
}
else
{
    // error
}

输入变量是ifrname。应该是接口(interface)名 "eth0", eth1", "ppp0"....

因为 ioctl() 需要一个文件描述符作为参数,您可以为此使用一些临时 UDP 套接字:

dummy_fd = socket( AF_INET, SOCK_DGRAM, 0 );

记得关闭套接字,当不再使用时。

关于c++ - 在 Linux 中使用 C++ 检测连接的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917790/

相关文章:

c++ - Tcl_Eval 在错误时返回调用堆栈

c++ - 来自内置类型的 python 转换器

c - 64 位系统上的 32 位兼容库

c++ - 检查 int 数据类型的输入是否有效

c++ - 有什么办法可以在C++中 “uninclude”文件?

linux - 对符号 'pthread_key_delete@@GLIBC_2.2.5 的 undefined reference

linux - Makefile:make 期间出错

java - 如何使用现有的 Java 类运行服务器来接受来自另一个应用程序的 API 调用?

Java - 按字节下载图像下载损坏的图像

c++ - boost::asio - 查看套接字缓冲区