登录
  • 人们都希望被别人需要 却往往事与愿违
  • 伟大的车工值得给他几倍于普通车工的薪水。但一个伟大的程序员, 其价值相当于普通程序员的 1 万倍!@比尔. 盖茨

谁看了我的米家摄像头?

瞎搞 Benny 小土豆 4812 次浏览 1528 字 4 个评论
文章目录 [显示]
这篇文章在 2023 年 09 月 15 日 16:40:42 更新了哦~

一年前,由于一个有些可笑的原因(别问我为什么,真的),我买了个米家的摄像头,然后分享给了某个人。那个时候我在想,有没有办法随时知道谁看了监控呢?管他是某个人还是其他什么奇奇怪怪的人。

米家本身并不提供这种功能,也不像其他品牌一样在摄像头被查看的时候会有一个特殊的指示灯显示。

既然如此,那作为一名有灵性的工程师,一定能找到办法的!

简单的说,自然就要从网络上下手啦!毕竟这个东西是需要通过网络传输数据的,在其他人查看的时候一定会大量的传输数据,并且根据常识推断,极有可能是 UDP,并且有可能通过 UDP 打洞的方式直接看到查看者的 IP 地址。

话不多说,说干就干,老子干网络这么多年,还不是 permit any any 通了就走!

抓包

既然要抓包,那自然也就在路由器上动手脚最好了。此时需要一个刷了 padavan、OpenWRT、Merlin 之类第三方固件的路由器,然后准备好 tcpdump

tcpdump 可以使用 opkg 之类的命令安装,如果你的 CPU 恰巧是 arm 的,可以用这个静态编译的。

假设摄像头的 IP 是 192.168.7.149,然后路由器的网桥是 br-lan(有些可能是 br0)

  1. tcpdump -i br-lan udp and host 192.168.7.149

此时打开手机,最好用流量来测试 IP,查看摄像头,大概率会看到类似如下日志:

谁看了我的米家摄像头?

如果没有的话,去掉 UDP 试试看。再没有就看看接口和 IP 对不对,有些情况下抓对应的 wlan01 可能更好。

分析

此时右侧的那个疯狂刷屏 39.xxxx 就是我的手机数据流量的出口 IP,中国移动的某个 IP。有些时候会看到一些金山云的 IP,可以直接忽略。

那么接下来问题来了

  1. 只有刷屏的 IP 才算是可能的查看记录,有什么办法揪出来吗?
  2. 咱也不能时时刻刻盯着 tcpdump 的输出啊!

令牌桶算法

只有刷屏的 IP 才可能是查看记录,那么如何分析统计这个 “刷屏频率”?最好的办法就是令牌桶算法啦!

所谓令牌桶,就是设计一个桶,某个组件持续地往里面丢令牌(token),然后每个请求进来的时候去这里拿令牌,拿到了就执行,拿不到就只能等着了。

令牌桶通常用于限流,我们的这个恰巧是 “反着来的限流”,反正只要撞了 rate limit 就是我们要的数据。

记得先写正则表达式过滤一下。

为了方便在路由器上运行,这事必然是要用 Go 来写的,毕竟交叉编译嘛

  1. package main
  2.  
  3. import (
  4. log "github.com/sirupsen/logrus"
  5. "golang.org/x/time/rate"
  6. )
  7.  
  8. const (
  9. bucketSize = 70
  10. bucketRate = 35
  11. )
  12.  
  13. var limiter = rate.NewLimiter(bucketRate, bucketSize)
  14.  
  15. func main() {
  16.  
  17. if limiter.Allow() {
  18. log.Infoln("Using token...")
  19. } else {
  20. log.Warnln("Potential view, sending alert now...")
  21. }
  22. }
  23.  

很简单,定义了一个桶,大小是 70,每秒钟产生 35 个令牌,说人话:每秒钟抓到 35 个包,刚好可以抵消令牌桶消耗;每秒抓到 40 个包,大概 8 秒会报警。至于这个 35 和 70 是怎么设计的嘛,是我从实践与经验中发现这个值最稳妥、最不容易误报。

消息通知

消息通知就很简单了,当 limiter.Allow() 不满足时,直接 telegram bot 就行了,这样最方便。

代码太过简单,就不说了

结果

真挺准的!俗话说知己知彼,百战不殆反正我是认输了。

谁看了我的米家摄像头?

也真的挺不好意思的我这玩意藏着掖着,快一年了才放出来……

谁看了我的米家摄像头?

参考代码

https://gist.github.com/BennyThink/c78cefa446fc492209710796ee342dec


文章版权归原作者所有丨本站默认采用 CC-BY-NC-SA 4.0 协议进行授权 |
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/who-view-micam.html
喜欢 (17)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(4) 个小伙伴在吐槽
  1. 现在是用也不是,不用也不是,摄像头呀,网络传输
    言之在线 2022-10-09 03:11 回复
  2. 不明觉厉
    1234562022-07-12 14:15 回复
  3. 在交换机端口镜像把数据接到虚拟机上面好似也行,再设计一个 vlanid 就更好
    peter2022-05-01 02:52 回复
    • 嗯,也行(就是麻烦
      -- 本评论由 Telegram Bot 回复~❤️
      Benny 小土豆 2022-05-01 18:19 回复
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿