gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:55:43 24 4
gpt4 key购买 nike

我想检测现在连接的是哪个接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com