openwrt 显示客户端client 连接的信息 /proc/net/arp /tmp/dhcp.leases

本文介绍如何通过查看路由器上的DHCP客户端分配列表和ARP缓存列表来获取已连接设备的名称、IP地址、MAC地址及连接类型等信息,并提供了一种判断设备是否通过Wi-Fi连接的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显示当前路由器上,client的name,ip,mac,connect_type信息

有两种方式:来自链接
一。通过DHCP client分配列表 (缺点:client列表会根据超时时间刷新,一般超时时间为12h,)
二。通过arp缓存列表/proc/net/arp(缺点:arp刷新时间默认为30s,这个时间的误差可以接受。)

主要讲解第二种方法:
Flags: 0x0是找不到这台主机了。
0x2是主机还在线。

root@OpenWrt:/# cat /proc/net/arp 
IP address       HW type     Flags       HW address            Mask     Device
192.168.0.188    0x1         0x2         00:e0:4c:68:00:03     *        br-lan
192.168.0.30     0x1         0x2         28:ed:6a:e9:ab:fb     *        br-lan
root@OpenWrt:/# 
root@OpenWrt:/# cat /tmp/dhcp.leases 
1525722001 28:ed:6a:e9:ab:fb 192.168.0.30 lin-bo-de 01:28:ed:6a:e9:ab:fb
root@OpenWrt:/# 

connect_type
判断是否是通过WIFI链接的,从iwpriv ra0 show stacountinfo把mac记录下,对比mac是否存在,存在的话是通过WiFi链接的,否则的话不是

dmesg -c  表示显示信息后,清除ring buffer中的内容。

char *strupr(char *str)
{
    char *orign=str;
    for (; *str!='\0'; str++)
        *str = toupper(*str);
    return orign;
}


int IsWifi(char *MAC){
    char wifimac[BUF_SIZE_128]={0};
    char uppermac[BUF_SIZE_128]={0};
    char *commond1 = "dmesg -c|iwpriv ra0 show stacountinfo" ;
    char *commond2 = "dmesg | grep MAC -A 20 | awk '{print $3}' >/tmp/wifista.txt" ;
    system(commond1);   
    system(commond2);
    FILE* fd = fopen("/tmp/wifista.txt","r");
    if(fd < 0)
    {
        return -1;
    }
    strcpy(uppermac,strupr(MAC));
    while(fgets(wifimac, sizeof(wifimac), fd) != NULL)
    {
        if(strncmp(uppermac,wifimac,17) == 0)
            {
                my_printf(1, "%s(%d) COMPARE SUCCESED wifiMAC is %s uppermac is %s \n",__FUNCTION__,__LINE__,wifimac,uppermac);
                return TRUE;
            }

            my_printf(1, "%s(%d) wifiMAC is %s mac is %s \n",__FUNCTION__,__LINE__,wifimac,uppermac);
        }

}

MAC , IP, NAME
分割cat /tmp/dhcp.leases ,获取

int get_net_arp_list(char* dst_arp_list)
{
    FILE *f=NULL;
    //char buf[BUF_SIZE_1024] = {0};
    //char *buf = NULL;
    //buf = (char*)malloc(sizeof(char)*1024);
    if ((f = fopen("/proc/net/arp", "r")) != NULL)
    {
        fread(dst_arp_list,1,sizeof(char)*1024,f);
        //buffer = buf;
        //dst_dhcp_list = buf;
        my_printf(LOG_MODE_LEVEL_1, "%s(%d) dst_arp_list is %s \n",__FUNCTION__,__LINE__,dst_arp_list);
        fclose(f);
    }
    return 0;
}
在Ubuntu中使用VSCode配置OpenCV并编写孔明棋的步骤大致如下: 1. 安装OpenCV:首先需要在Ubuntu系统中安装OpenCV库。可以通过以下命令在终端中安装OpenCV: ``` sudo apt-get install libopencv-dev ``` 2. 安装VSCode和C/C++扩展:如果尚未安装VSCode,可以访问其官方网站下载并安装。安装完成后,需要安装C/C++扩展,以便在VSCode中编写和运行C/C++代码。 3. 创建项目文件夹:在合适的位置创建一个新的文件夹作为项目目录。 4. 创建C/C++源文件:在项目目录中创建孔明棋的源代码文件,例如`kongmingqi.cpp`。 5. 配置VSCode的`tasks.json`:需要配置一个编译任务来编译C++代码。右键点击项目目录中的`.vscode`文件夹(如果不存在则创建一个),选择“在终端中打开”,然后输入`code .`打开VSCode,并创建或修改`tasks.json`文件,加入如下配置: ```json { "version": "2.0.0", "tasks": [ { "label": "C++ build", "type": "shell", "command": "g++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-std=c++11", "-I/usr/include/opencv4" ], "group": { "kind": "build", "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": false }, "problemMatcher": [ "$gcc" ] } ] } ``` 6. 配置VSCode的`c_cpp_properties.json`:确保你的C++环境路径配置正确。这可以在VSCode的设置中通过“C/Cpp: Edit Configurations (UI)”命令来完成。 7. 编写孔明棋代码:在`kongmingqi.cpp`中编写孔明棋的逻辑代码。 8. 构建和运行:在VSCode中按下`Ctrl+Shift+B`启动构建任务,然后可以通过在终端中运行编译后的可执行文件来运行孔明棋。 请注意,孔明棋的实现细节取决于具体的游戏规则和你打算如何实现它。你需要编写相应的算法来实现棋盘的布局、棋子的移动规则以及游戏的胜负判断逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值