胆囊息肉

首页 » 常识 » 问答 » 学个锤子校园网保证一机一号和检测共享上网
TUhjnbcbe - 2025/7/18 21:18:00

▍写在前面

出于利益等原因,许多校园网采取一机一号的管理方式。即一个宽带账号只能由一台规定的设备使用。同时检测共享上网以避免使用路由器或类似方式实现共享。那么这些限制背后的原理是什么呢?

▍一机一号的原理

目前大多数校园网的认证协议依然是PPPoE,所以要知道一机一号的原理就要先粗略了解一下PPPoE。

PPPoE的全称是(Point-to-PointProtocolOverEthernet),即以太网上的点对点协议。以太网本身不具有身份验证功能但是PPP可以,所及将PPP引入以太网可以满足ISP对用户身份的验证需求。

PPPoE运行在OSI的数据链路层,TCP/IP体系结构的网络接口层,同时由于它只在拨号时起作用,所以此时没有IP地址起作用,由此可以推测如果要实现一机一号,关键的信息之一是MAC地址。事实上也确实如此。

PPPoE拨号时会在「发现」阶段向以太网中发送广播,表示自己想要找到一个可以提供网络服务的节点,并在广播中说明自己的MAC地址。ISP的节点接收到消息后会回应这个广播并说明自己的MAC地址,然后两个节点就建立了会话。此后便使用PPP通信,通信过程中就包含了身份认证过程。

注意到此时ISP的节点只有拨号设备的MAC地址和宽带的账号和密码。看来答案已经出现了。ISP通过维护宽带账号和MAC地址的一一对应的关系来实现一机一号。只要发现MAC地址和宽带账号不匹配直接报错就行了。

▍共享上网检测的原理

仅仅一机一号还不够,因为可以通过路由器实现多人共用同一个宽带。路由器通过NAT让多个内网IP共用一个IP与ISP节点通信,这给共享上网的检测带来的困难,但依然有一些方法。

▍检测IP报文头identification字段

上图就是IP报文头的结构,第二行的左边就是需要被检测的字段,下面是该字段的说明。

Anidentifyingvalueassignedbythesendertoaidinassemblingthefragmentsofadatagram.RFC-

看起来似乎不能用来检测共享上网?单单这样看确实不能,但是Windows网络协议栈在实现的时候这个值是随着IP报文的发送数量的增加而增加的,且初始值是一个随机数。所以对于使用Windows的设备来说,它们的identification的初始值通常是差距很大的,所以可以用来检测共享上网。

值得一提的是这并不适用于Linux、Unix,因为它们的identification的值是完全随机的,没有规律可循。

▍TTL检测

TTL是TimeToLive的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL(生存时间值)_百度百科

不同的操作系统的TTL可能是不同的,所以如果检测到两个不同的TTL则可以断定网络中有两台设备。

▍时间戳检测

不同物理机的时钟偏移通常是不同的,这也就使得物理时钟会与协议栈时钟之间存在一种通常不同于其它设备的特殊的联系。同时主机发送报文的频率与时钟又存在统计上的关系,所以可以通过这一点来检测出又几种不同的时钟偏移从而检测网络中的设备数量。

▍深度报文检测(DPI)

DPI(DeepPacketInspection)是一种基于数据包的深度检测技术,针对不同的网络应用层载荷(例如HTTP、DNS等)进行深度检测,通过对报文的有效载荷检测决定其合法性。DPI(深度报文检测)_百度百科

主要通过检测应用层的报文来判断设备数量。

比如通过检测Http.UserAgent字段来判断。一个用户使用的浏览器通常是固定的,而浏览器发送请求时所使用的UserAgent也是相对固定的。在排除一个用户设备上的许多客户端应用也使用HTTP协议的情况下,如果一个网络中的Http.UserAgent有许多不同的值,则可以怀疑这个网络中有许多不同的设备在上网。

▍参考资料

RFC–AMethodforTransmittingPPPOverEthernet(PPPoE)链接:

1
查看完整版本: 学个锤子校园网保证一机一号和检测共享上网