V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
horou
V2EX  ›  程序员

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

  •  
  •   horou · 326 天前 · 2364 次点击
    这是一个创建于 326 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    第 1 条附言  ·  325 天前

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

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

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

    如果是 Android 手机:

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

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

    adb shell settings put global wifi_sleep_policy 2

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