校园网保证一机一号和检测共享上网的原理

写在前面

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

一机一号的原理

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

PPPoE 的全称是(Point-to-Point Protocol Over Ethernet),即以太网上的点对点协议。以太网本身不具有身份验证功能 但是 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 报文头的结构,第二行的左边就是需要被检测的字段,下面是该字段的说明。

An identifying value assigned by the sender to aid in assembling the fragments of a datagram.

RFC-791

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

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

TTL 检测

TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。

TTL(生存时间值)_百度百科

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

时间戳检测

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

深度报文检测(DPI)

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

DPI(深度报文检测)_百度百科

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

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

参考资料

本文作者:ADD-SP
本文链接:https://www.addesp.com/archives/1769
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。

评论

  1. 迎风丨Blog
    2天前
    2020-10-18 21:39:23

    文章写的不错,加油~

    • ADD-SP 博主
      2天前
      2020-10-18 23:49:34

      多谢支持,有空来逛逛 ~

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇