在linux中使用c ++检测连接接口

Lrr*_*rrr 3 c++ linux networking routing tcp

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

SKi*_*SKi 6

使用ioctl SIOCGIFFLAGS检查是接口和运行:

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
}
Run Code Online (Sandbox Code Playgroud)

输入变量是ifrname.它应该是接口名称"eth0",eth1","ppp0"....

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

dummy_fd = socket( AF_INET, SOCK_DGRAM, 0 );
Run Code Online (Sandbox Code Playgroud)

记得关闭插座,不再使用时.


Mic*_*ild 3

如果您使用 NetworkManager,则可以使用它的API。您可以使用 D-Bus API、GLib 包装、D-Bus 的 C++ 绑定

如果您使用的是Qt,则可以直接使用QtNetwork

当然,您也可以非常低级地使用ioctl(7). 有关示例,请参阅Adam Risilsif 。