linux下使用c++检测连接的接口
detecting connected interface using c++ in linux
我想检测哪个接口现在连接;我有三个3g调制解调器连接和两个局域网连接到服务器(我的设备不支持wlan)。我的意思是,连接的类型并不重要,接口名称和细节对我来说才是重要的。我想在我用c++编写的程序中检测连接接口。请告诉我如何在c++中检测连接的接口?(root权限不是问题)
使用ioctl
SIOCGIFFLAGS
检查接口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
。应该是"eth0","eth1","ppp0"....
因为ioctl()
需要一个文件描述符作为参数,您可以使用例如一些临时UDP套接字:
dummy_fd = socket( AF_INET, SOCK_DGRAM, 0 );
如果你正在使用NetworkManager,你可以使用它的API。你可以使用D-Bus API, GLib包装,c++绑定D-Bus。
如果你正在使用Qt,你可以直接使用QtNetwork。
当然,您也可以非常低级地使用ioctl(7)
。
您也可以使用netlink路由套接字。参考libnetlink库,或man 7 netlink和man 7 rtnetlink
相关文章:
- 当套接字连接断开时检测C/C++Unix
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- Visual C++GC接口如何启用它以及要包含哪个库
- Windows.h与GLFW.h的接口
- 无法在windows上使用mingw将sqlite3与c连接
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- C++WinSock选择本地接口进行连接
- 连接来自 C++98 接口的 Qt 插槽和信号,无需 Qt、STL 或 Boost
- 为什么使用 C++ 接口作为类之间的连接?
- Qt连接到插槽辅助接口
- 如何在非网关接口 Linux 上检测互联网连接
- 增强信号:在类接口中公开信号本身或连接/断开方法
- QTcpSocket:使用bind()选择源接口,以便使用connectToHost()连接到远程主机:需要一个解决方法
- 连接接口中声明的QT信号
- 如何在带有C / C++的Windows中确定连接的Wifi WLAN接口
- linux下使用c++检测连接的接口
- 动态连接 QML 中图形的节点 la Pd 或 Max(又名"patching"接口)
- 如何将抽象信号连接到接口构造函数中的插槽?
- 特定接口上的TCP/IP连接
- 如何从Windows应用程序中检测禁用的网络接口连接?