找回密码
 立即注册
img_loading
智能检测中

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888广告投放联系QQ68610888
glinet
查看: 1209|回复: 6

分享一则关于某个设备在线离线过程记录脚本

[复制链接]
发表于 2023-1-29 15:57 | 显示全部楼层 |阅读模式
本帖最后由 liaohcai 于 2023-1-29 16:06 编辑

一、背景:
       自从小孩学会了使用电脑后,家长想知道小孩半夜有没有起来玩电脑,或者是家长不家,小孩在该写作业的时候看电视,在家长回来时关掉。
       或者想知道某个设备的连网情况,中间过程有没有断开。
       或者想查看家人什么时间回家和出去的记录,因为根本上人手一部手机,在家会自动连上wifi。


二、前言:
       我的主路由是CR6609,已经刷好了openwrt (固件版本OpenWrt 01.08.2023 by Kiddin' / LuCI Master git-264dc3c)是正常安装插件的固件。于是我找遍了整个国内大内网,找不到类似监控连网记录功能的插件。要实现类似功能需要买有行为监控的企业级路由器,用软路由安装爱快。
       我本身不是程序员,但我是openwrt 和padavan爱好者(自己从没编译过固体),学过一些shell 脚本语言。
       利用春节这几天,自己试着编写一则在线离线记录脚本,再经过两天的调试,脚本能正常运行,记录。
三、原理:
       方法一是,利用路由器每隔一时间去ping目标设备ip地址,如果ping通了表示设备在线,并记录时刻 和“在线”状态,否则为“离线”状态。(非常准)

       方法二是,利用路由器的“ip -4 nei | grep REACHABLE”每隔一时间查找对应的mac和ip的活动状态(reachable | stale),如果是reachable表示设备在线,并记录时刻 和“在线”状态,否则为“离线”状态。(不那么准,设备连上网了,但它不活动,就被标记为stale)

       方法三是,利用路由器的arp缓存,每隔一时间查找对应的mac和ip的在线(0x2)和不在线(0x0)状态, 如果是reachable表示设备在线,并记录时刻 和“在线”状态,否则为“离线”状态。(较准,arp缓存存在一段时间,设备离线要等上一两分钟才能标记为0x0,可以接受,对于一些设备禁用了ping只能用此方法。)


四、经历:
       第一个版本,生成的记录是每分钟记录一次,经过一段时间后,生成的记录文件变得非常巨大,打开慢,不利查看。
       第二个版本,合并连续的“在线”为一个时间记录和连续的”离线“为一个时间记录。
       第三个版本,增加了时长记录,这一版本用了我两天的时间调试,已经能正常记录
这是第三个版本的脚本:
  1. #!/bin/sh
  2. ########################
  3. ########################
  4. ip=192.168.3.12
  5. ##填写要监控的ip地址
  6. onlinelog="/tmp/L台式电脑在线记录.log"
  7. ##填写保存目录文件名。“/tmp”是临时目录,路由器关机或重启里面的文件不保存,它是映射在运存中,频繁读写的文件最好是保存在“/tmp中”。
  8. ########################
  9. ########################

  10. p=`echo $ip | tr . _`
  11. d=`date +%F' '%X `

  12. #############################
  13. f=`find $onlinelog`
  14. if [ "$f" != "$onlinelog" ] ;then
  15. echo "这是名为L的台式电脑连接CR6609路由器的连网记录,间接了解电脑的开机和关机时间或时长"   >> $onlinelog
  16. echo [$d] "这是脚本开始运行时间,下一行才是设备的状态"   >> $onlinelog
  17. exit
  18. fi
  19. ##因为用到两个日期计算需要一个开始日期,否则报错。
  20. #############################

  21. t1=`echo $d`
  22. t2=`echo $(cat $onlinelog |tail -n 1 | cut -d[ -f2 | cut -d] -f1)`
  23. long=$(($(date +%s -d "$t1") - $(date +%s -d "$t2")))
  24. hour=$(( $long/3600))
  25. min=$(( ($long-${hour}*3600)/60 ))
  26. sec=$(( $long-${hour}*3600-${min}*60))
  27. HMS=`echo ${hour}小时${min}分${sec}秒`
  28. a=`ping $ip -c 2 -A`
  29. b=`echo $a |grep -o "100%" `
  30. if [ "$b" == "100%" ] ;then
  31. old=$(tail -n 1 $onlinelog)
  32.         if [ "离线" == "$(echo $old | grep -o "离线")" ] ; then
  33.         exit
  34.         else
  35.         echo [$d] "离线" "(连网时长:${HMS})"  >> $onlinelog
  36.         fi
  37. else
  38. old=$(tail -n 1 $onlinelog)
  39.         if [ "在线" == "$(echo $old | grep -o "在线")" ] ; then
  40.         exit
  41.         else
  42.         echo [$d] "在线" "(断网时长:${HMS})"  >> $onlinelog
  43.         fi
  44. fi
  45. exit
复制代码



这是生成的记录:


五、食用:
       在win 10上用winSCP登录openwrt后台,将脚本上传到“/etc”目录中,双击打开编辑脚本,填写你要监控的ip和生成记录的文件名。然后在用浏览器登录 openwrt,在系统-计划任务中以下代码:
  1. */1 * * * * sh /etc/脚本名.txt
复制代码
保存!可以按此方法添加多个。
       经过一段时间后再用winSCP 登录openwrt后台在“/tmp”打开生成的记录文件。

如果文件名是中文有可能是乱码,需要在winSCP的登录设置:开启文件名UTF-8编码


或者用SSH终端查看
手机可以用JuiceSSH查看
  1. cat /tmp/记录文件名
复制代码
六、后记
如果觉得用,请回复
最后附上脚本文件





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2023-1-29 16:24 | 显示全部楼层
感觉还不错
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-1-29 16:24 | 显示全部楼层
感觉还不错
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-1-30 09:33 来自手机 | 显示全部楼层
日志放tmp目录,路由器重启后会丢失日志吗?

点评

会丢失的,因为这个文件频繁的写入,运存没有读写次数,很多频繁读写的文件都是保存在这里!  详情 回复 发表于 2023-1-30 12:12
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

发表于 2023-1-30 10:35 | 显示全部楼层
一直用全能推送,连接断开自动推送消息

点评

我试试用”全能推送“看看  详情 回复 发表于 2023-1-30 12:42
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-30 12:12 来自手机 | 显示全部楼层
aming.ou 发表于 2023-1-30 09:33
日志放tmp目录,路由器重启后会丢失日志吗?

会丢失的,因为这个文件频繁的写入,运存没有读写次数,很多频繁读写的文件都是保存在这里!
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-30 12:42 | 显示全部楼层
jjss520 发表于 2023-1-30 10:35
一直用全能推送,连接断开自动推送消息

我试试用”全能推送“看看
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛

只谈技术、莫论政事!切勿转播谣言!为了你也为了他人。
只谈技术、莫论政事!(点击见详情) 切记不要随意传播谣言,把自己的日子过安稳了就行,为了自己好也为了大家好。 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。

查看 »

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2025-5-31 00:00

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表