获取在线用户的hostname,ip,操作系统,制造商

在这里插入图片描述

获取在线用户主机名,ip,操作系统,制造商

  背景:最近在做和云AC对接的工作。需要把在线用户的一些信息给上传到服务器。关于,在线用户的无线速率,流量之类的东西可以在无线驱动中获取,通过ioctl可以获取相应的数据。但是关于在线用户的主机名,ip,操作系统,制造商。在无线驱动中是获取不到的。因为AP起到的是桥接作用。所以按道理AP的无法知道主机名的。但是,我们2.8的页面却有这些功能,这又是怎么做到的呢?


通过查看代码,发现AP获取这些信息,原来是根据DHCP请求报文获取到的。因此,我们就要了解一下,什么是DHCP报文,为什么能够获取这些信息?

DHCP流程

在这里,我就简单的按照我们用户上线的过程进行分析。

DHCP请求一共分为四步:

  1. 用户首先发送DHCP discover包,这是一个广播包。(我需要一个ip,请问哪个DHCP可以为我分配ip)
  2. 局域网内的DHCP服务器,收到了这个广播包之后,就会回复一个DHCP offer单播包。如果有多个服务器收到了广播包,就会有多个服务器回复offer单播包。(我可以给你分配IP,IP是*******)
  3. 用户如果收到了多个offer包,一般只会处理第一个包。收到offer包之后,用户就会将IP设置成对应的IP。再发一个DHCP request广播包。(你们好,我用的是这个IP*****,IP信息是在option50里面)
  4. 局域网内的DHCP服务器,收到了DHCP request 包,就会根据里面的信息,查看是否使用的是自己分配的IP,如果是,就记录下来,如果不是就不管。并返回一个ack确认信息。

通过上面的流程,我们就可以知道,第一个包和第二个包是广播包,我们同在局域网内的AP也是可以获取到的。
所以方案一:
我们之前的做法就是,在AP的设备里面,写一个socket,一直读取接AP收到的DHCP包,之后进行分析。

首先找到DHCP request 包。然后通过option选项读取内容。

hostname在option12中。

ip在option 50中。

操作系统在option 55中

制造商我们是根据mac地址的前三个字节计算的oui。有一个mac地址对应生产商的表。
以上的方式就是我们以前的AP获取在线用户信息的方式。

oui

oui (组织唯一标识符)在任何一块网卡(NIC)中烧录的6字节MAC地址中,前3个字节体现了OUI,其表明了NIC的制造组织。通常情况下,该标识符是唯一的。

评价

根据之前的实现方式,我们可以清楚的看到这种方案有许多不足的地方。

  1. 并不是每个手机发送DHCP request包,都具有hostname选项。也就说,很有可能有的在线用户是获取不到hostname的。
  2. 操作系统和制造商在根据对应的表计算得出。这就有一个局限性。那就是随着时间的推移,市场上移动客户端的更新换代,这个表也是需要更新的。每一个更新,都要重新更细软件。型号多了,这样就显得更加不妥。(我就将我的红米 4A手机连上了AP无线,但是页面上却显示我的操作系统是windons。因为代码是2015年的,表并没有更新,才导致错误)

HTTP

在通过抓取http的包的时候,我发现,有这样的一行信息

User-Agent: Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; Redmi 4A Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.2.8

我们可以从这行信息中,获取到操作系统,手机型号,生产商。这就说明通过抓取http的包,是可以获取在线用户的一些信息的。这种方式的好处在于,不需要自己对应表进行查询。直接可以在保重得到信息。
具体为什么http能够获取到这些信息,大家可以在网上搜索一下http-User-Agent的讲解。

1.其实这种方案也有不足的地方,那就是,在线的用户必须去发http的包,我才能获取到这些信息。导致页面上显示的信息,应该会不同步。

2.具体了解user-agent字符串之后,你会发现,不同的浏览器获取到的数据也是不同的。一般确定能够获取到的是操作系统名称。

总结

通过以上两种方式。我们可以知道。

方案一:需要更新的对应的表格,这样对后期的维护不方便

方案二:不能确切的保证能够获取到相应的信息。且显示会不同步。

现在很多的手机在第二次连接之后都会从request开始,如果不可以,再从discover开始。

若我的内容对您有所帮助,还请关注我的公众号。不定期分享干活,剖析案例,也可以一起讨论分享。

我的宗旨:

踩完您工作中的所有坑并分享给您,让你的工作无bug,人生尽是坦途请添加图片描述

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢艺华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值