检测网络接口更改
detect network interface change
我的 UBUNTU 机器有两个网络接口端口。我想用 C/C++ 编写一个应用程序,我可以在其中检测网络接口的变化并打印结果。
例如,当连接两条网络电缆时,应用程序应打印两个接口都已打开。 当我拔下一根电缆时,应用程序应删除该接口的所有信息并打印哪个接口已关闭和打开。
您可以使用以下ioctl()
轮询链接的状态:
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, "eth0");
if (ioctl(fd, SIOCGIFFLAGS, &ifr) != -1)
{
up_and_running = (ifr.ifr_flags & ( IFF_UP | IFF_RUNNING )) == ( IFF_UP | IFF_RUNNING );
}
如果您想立即了解有关更改的信息, 然后侦听来自内核的网链消息。
参见手册页 PF_NETLINK(7(。
要创建AF_NETLINK套接字以获取链接事件:
const int netlink_fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (netlink_fd != -1)
{
struct sockaddr_nl sa;
memset(&sa, 0, sizeof(sa));
sa.nl_family = AF_NETLINK;
sa.nl_groups = RTNLGRP_LINK;
bind(netlink_fd, (struct sockaddr*)&sa, sizeof(sa));
}
..并根据需要接收和处理消息。
有一个库libnl可以简化它。
相关文章:
- 如何绑定 C++ gRPC 客户端的网络接口
- C/C++:POSIX 兼容方式查找默认网络接口上/下
- 如何以编程方式将路由添加到网络接口
- 检测网络接口更改
- 使用 Boost.Asio 将 UDP 套接字绑定到特定网络接口
- 用于修改网络接口属性的 Win32 API
- 如何使用Qt在Windows上检查网络接口类型是以太网或无线
- 实现现有的网络接口,以相对于C 11中的Endianess定义位字段
- 网络接口的状态
- getifaddrs 是否给我重复的网络接口地址
- C++获取网络接口信息
- 如何在 Linux 的 cpp 中查找侦听 0.0.0.0 的服务器的网络接口
- 如何设置IP到网络接口
- 通过WinAPI禁用/启用网络接口
- 从IPv4地址获取网络接口名称
- curl—是否有办法强制curl使用特定的网络接口?
- 查找C/ c++中可用的网络接口
- 如何通过USB接口检测PC机是否插拔了硬件设备?
- c-ares指定DNS解析的网络接口
- 如何从Windows应用程序中检测禁用的网络接口连接?