大家共享上网,一般都是用路由器作NAT、NAPT方式的IP地址转换,把多个内网地址转换成一个公网IP地址。
路由器或者代理只是对IP地址作了转换,从外部来看是看不出来与普通的IP包有什么不同的,那么是如何检测到的呢,用IP协议构建的互联网,一共有5层结构,电信能获取得只能是第三层到第五层,至于网上有TX说的什么伪造MAC地址的办法肯定不行,MAC地址出了路由器就被重新封装了,电信根本拿不到。 至于应用层分析,狗的这层千差万别的应用,他们也更本没这个技术能力来确定我们机器的数量。看来只有分析IP和TCP包头了,仔细分析IP报头看看到底有那些信息可能泄漏我们内网机器得数量。看一下IP报文的结构:
0 4 8 16 31
版本 首部长 服务类型 总长度
标识 标志 片偏移量
寿命 协议 首部校验和
源端IP地址
目的端IP地址
长度可变的任选字段 填充
数据
…
版本:IP协议的版本,大家都是4。
首部长度:报头首部的长度,4字节的整倍数。
服务类型(TOS):每个机器都一样,用来表示优先级。
总长度:整个报文首部和数据的长度。
标识(identification):数据报的标识,用来标识出数据长度超过MTU分片时,进行重新组装数据的位置标识。这部分可以用来分析共享上网的特征。
标志:有MF和DF分别标志分片结束和不能分片。
片偏移: 长报文分片后,在原报文中的位置。
生存时间(TTL):数据报在网络中的寿命。
协议: 携带数据使用的协议。
首部校验和:报文首部的校验信息。
源地址:4字节源IP地址。
目的地址:4字节目的地址。
从IP报头的组成来看,只有可能携带内网信息的就是“标识(IPID)”,在每一台内网机器作地址转换时,IPID的序号是没变化的,而每台机器又是随机从一个数开始,有规律单调增加,看来根据这个ID的不连续来判断机器的数量。 抓包看看,果然:
12:19:41.000000 10.10.49.204.61993 > 10.199.201.37.http: . [tcp sum ok] ack 4292552168 win 64240 (DF) (ttl 127, id 40255, len 40)
12:20:23.000000 10.10.49.204.62017 > 10.199.201.37.http: . [tcp sum ok] ack 1 win 64240 (DF) (ttl 127, id 40756, len 40)
12:21:37.000000 10.10.49.204.62216 > 10.54.226.252.http: S [tcp sum ok] 1820371619:1820371619(0) win 16384 (DF) (ttl 127, id 57601, len 48)
12:21:40.000000 10.10.49.204.61993 > 10.199.201.37.http: . [tcp sum ok] ack 4293696808 win 64240 (DF) (ttl 127, id 41427, len 40)
12:22:06.000000 10.10.49.204.61993 > 10.199.201.37.http: . [tcp sum ok] ack 4293946004 win 64240 (DF) (ttl 127, id 41671, len 40)
12:23:10.000000 10.10.49.204.62017 > 10.199.201.37.http: . [tcp sum ok] ack 1633741 win 64240 (DF) (ttl 127, id 42293, len 40)
12:24:00.000000 10.10.49.204.61993 > 10.199.201.37.http: . [tcp sum ok] ack 4294795172 win 64240 (DF) (ttl 127, id 42632, len 40)
12:24:24.000000 10.10.49.204.61993 > 10.199.201.37.http: SFRPW [bad tcp cksum 1748!] 2115643160:2115643180(20) ack 972685314 win 46144 urg 3585 (DF) (ttl 125, id 42893, len 40)
12:25:05.000000 10.10.49.204.62259 > 10.200.222.45.http: P [bad tcp cksum 6be7!] ack 1 win 19652 (DF) (ttl 127, id 1673, len 40)
12:25:53.000000 10.10.49.204.61993 > 10.199.201.37.http: . [tcp sum ok] ack 940080 win 64240 (DF) (ttl 127, id 43799, len 40)
12:25:56.000000 10.10.49.204.61993 > 10.199.201.37.http: . [bad tcp cksum 579d!] ack 1019539 win 17520 (DF) (ttl 125, id 43846, len 40)
12:25:56.000000 10.10.49.204.62017 > 10.199.201.37.http: E [bad tcp cksum 8380!] 2120652494:2120652506(12) win 11414 urg 5633 (DF) (ttl 125, id 43859, len 40)
12:26:05.000000 10.10.49.204.62259 > 10.200.222.45.http: R [tcp sum ok] 3206002624:3206002624(0) win 0 (DF) (ttl 127, id 1731, len 40)
有三个变化范围的IPID序号,彩色标记出来的IPID序列号的变化很有规律,一定范围内变化的报文就是由一台机器发出的,嘿嘿,根据这个因此可以判断有三台机器共享上网。
再看看TCP头里面有什么东西可以看看,抓包来看,居然Windows将每个TCP的包头中的可选扩展段用来打标每台机器的时间戳,想必我们每台机器的时间不会都调得如此精准,每个机器发出的时间戳的误差不会完全相同,看来利用这个时间戳也可以大致判断内网的机器数量。 (DVOL本文转自:中国DV传媒 http://www.dvol.cn)