V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
horou
V2EX  ›  程序员

如何判断同局域网下手机是否在线

  •  
  •   horou · 2023-05-08 16:46:27 +08:00 · 2716 次点击
    这是一个创建于 595 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在拥有手机局域网 ip 的情况下我想要判断同局域网下手机是否还处于连接 wifi 中,应该如何做

    目前的做法是每隔一段时间 ping 一下手机的 ip ,但是有个问题是,部分手机息屏后就 ping 不通了,会超时,如何解决这个问题,或者有其他的替代方案没

    第 1 条附言  ·  2023-05-08 20:51:30 +08:00

    很多v友询问我这边对设备在线的定义,可能我表达的不是很清楚,我这里统一回复一下

    我这边的需求对设备在线的定义是:设备如果是一直连着路由器的wifi,就认为是在线,如果设备离开wifi范围,或者设备关机,切换网络导致wifi断开了,就代表设备是离线状态。

    31 条回复    2023-05-09 08:44:32 +08:00
    dxgfalcongbit
        1
    dxgfalcongbit  
       2023-05-08 16:48:34 +08:00 via Android
    我是在路由器里查看当前在线设备
    Puteulanus
        2
    Puteulanus  
       2023-05-08 16:48:34 +08:00
    淘宝有卖蓝牙探针设备的,不过有点贵好像
    uplee
        3
    uplee  
       2023-05-08 16:48:56 +08:00
    以前简单搞过,记录手机的 MAC 地址,然后查局域网在线设备
    chenxytw
        4
    chenxytw  
       2023-05-08 16:50:01 +08:00
    一个侧信道思路(
    很多路由器都有的已连接设备列表 api 。
    brader
        5
    brader  
       2023-05-08 16:51:29 +08:00
    部分手机息屏后就 ping 不通了,会超时。
    其实这个没问题的吧,我手机就会,我观察过路由器后台的在线设备列表,其实手机息屏后,设备列表就没有手机了,说明下线了,没问题的
    horou
        6
    horou  
    OP
       2023-05-08 16:53:55 +08:00
    @uplee 查局域网在线设备这一步是怎么做的,还有就是我只能拿到手机的 ip 地址,没法拿到手机的 mac
    DCELL
        7
    DCELL  
       2023-05-08 16:54:34 +08:00
    局域网广播?
    wegfdhsak
        8
    wegfdhsak  
       2023-05-08 16:55:28 +08:00 via iPhone
    扫描一下不就好了?
    horou
        9
    horou  
    OP
       2023-05-08 16:55:28 +08:00
    @chenxytw 想实现一个通用的做法,用路由器自带的 api ,不同厂商的路由器 api 应该不一致吧
    horou
        10
    horou  
    OP
       2023-05-08 16:57:38 +08:00
    @wegfdhsak 没搞过...,应该用什么方式扫描呢
    Tuuure
        11
    Tuuure  
       2023-05-08 16:58:02 +08:00
    arp 扫描?
    nigelboy
        12
    nigelboy  
       2023-05-08 17:00:21 +08:00
    promethous 有个黑盒探测的插件,通过 ping 或者端口探测设备是否在线
    proxytoworld
        13
    proxytoworld  
       2023-05-08 17:04:24 +08:00
    我怎么感觉你这是灰产
    uplee
        14
    uplee  
       2023-05-08 17:04:28 +08:00
    @horou 我当时是抓的路由器在线界面,你可以试试用命令,比如 win 下的 arp -a
    horou
        15
    horou  
    OP
       2023-05-08 17:07:05 +08:00
    @proxytoworld 不是灰产...功能实现的是通过 ip 绑定设备,如果设备离线就解除绑定,目前就差一个设备在线的判断
    Andim
        16
    Andim  
       2023-05-08 17:07:53 +08:00 via iPhone
    iOS 上有 HE Network Tools 可以查看 arp NDP
    zbatman
        17
    zbatman  
       2023-05-08 17:08:08 +08:00
    打开手机屏幕,看一下有没有 wifi 图标
    debuggerx
        18
    debuggerx  
       2023-05-08 17:10:53 +08:00
    mDNS/DNS-SD
    greatbody
        19
    greatbody  
       2023-05-08 17:13:25 +08:00
    @brader 同意你的观点。OP 最好解释下自己对于手机在线的定义,否则我认为 @brader 这个回答已经能解答你的问题了。
    mk0114
        20
    mk0114  
       2023-05-08 17:20:05 +08:00
    ping 不通就是离线,息屏也是离线,没毛病。
    565656
        21
    565656  
       2023-05-08 17:20:34 +08:00
    ios 自带私密 mac 地址,导致每一次链接 wifu 后 ip 都会变,要关下
    jstony
        22
    jstony  
       2023-05-08 17:29:40 +08:00   ❤️ 1
    op 如果可以给“在线”做个定义,应该就会清晰很多。比如息屏 ping 不通了,这个算在线还是不在线?如果持续 30 分钟都 ping 不通,算在线还是不在线?这个定义清晰了,op 的问题应该就迎刃而解了吧
    lovelylain
        23
    lovelylain  
       2023-05-08 17:35:11 +08:00
    路由器 arp 表,设备要能上网得过路由器,过了路由器就会刷新 arp 表,所以路由器 arp 表是最靠谱的。
    yufeng0681
        24
    yufeng0681  
       2023-05-08 17:42:58 +08:00
    原始需求并没有讲到点子上。
    手机设备下线,IP 解除绑定,这个场景的描述都不全。
    手机不在局域网了,ip 自然就不用了,路由器自己有算法老化,让网络其他设备使用 ip 地址。
    你做的服务为何需要知道手机的 ip 地址?
    ochatokori
        25
    ochatokori  
       2023-05-08 17:48:53 +08:00 via Android
    查 iptables 看看这台机器有没有流量出来,几乎没有手机没有系统级长链接
    dabang007
        26
    dabang007  
       2023-05-08 17:52:49 +08:00
    这个最简单用 ESP8266 就可以做(前提是 2.4G Wifi),定期看手机数据是否有收发,配合老化算法
    miyuki
        27
    miyuki  
       2023-05-08 20:03:51 +08:00
    ping 主机名?
    mohumohu
        28
    mohumohu  
       2023-05-08 21:16:46 +08:00
    homeassint 自带插件就有这功能,是用的 Nmap Tracker
    mgrddsj
        29
    mgrddsj  
       2023-05-09 01:47:42 +08:00
    其实“部分手机熄屏后就 ping 不通了”有可能是设备锁屏后会断开 WiFi 来省电导致的。

    如果是 Android 手机:

    部分手机在设置 - WiFi - 高级 - “在休眠状态下保持 WLAN 网络连接” - 始终,即可保持熄屏后保持 WiFi 连接。

    Google 似乎在某个版本的 Android 里移除了这个选项。对于那些没有这个选项的设备,可以通过 adb 命令更改:

    adb shell settings put global wifi_sleep_policy 2

    其中,0 = 永不,1 = 仅充电时,2 = 始终.
    lskjdfgl
        30
    lskjdfgl  
       2023-05-09 08:36:39 +08:00
    @uplee 判断 mac 会有问题,现在的设备大部分都是随机 mac
    wangtian2020
        31
    wangtian2020  
       2023-05-09 08:44:32 +08:00
    像小米路由器管理后台有在线设备列表的,模拟请求借路由器的管理 web 的 API 就好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5162 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:38 · PVG 17:38 · LAX 01:38 · JFK 04:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.