目录
由于系统的区别,他们在发起TCP请求时由于不同的配置以至于他们的请求具备一定的特征。本文从 browserstack device 产生的tcp 指纹的进行简单分析,记录下发现的特征。
ip_start_tll
os count ip_start_ttl_128 ip_start_ttl_60
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 38
iPhone 16 16
iPad 12 12
Android 60 60
小结:
- Win 为 128
- IOS 为 60(64)
- Android 为 60(64)
ip_df
os count ip_df_0 ip_df_1
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 12 26
iPhone 16 15 1
iPad 12 12
Android 60 60
小结:
- Win 为 1
- IOS
- iPad 为 0
- 大部分iphone 为 0
- 部分mac为 1,部分为0 ,可能和系统版本有关。
- Android 为 1
tcp_flags
os count tcp_flags_194 tcp_flags_2
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 3 35
iPhone 16 16
iPad 12 1 11
Android 60 60
小结:
- Win 为
- XP、7 、10 为 2
- 8、 8.1 为 194
- IOS
- 大部分iPad 为 2
- iphone 为 16
- 大部分mac为 2,小部分为194
- Android 为 2
tcp_header_length
os count 128 160 176
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 38
iPhone 16 16
iPad 12 12
Android 60 60
该值主要受tcp_option影响。
小结:
- Win 为 128
- IOS 为 176
- Android 为 160
tcp_options_loyout
os count MNWNNS MNWNNTSEE MSTNW
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 38
iPhone 16 16
iPad 12 12
Android 60 60
小结:
- Win 为 MNWNNS
- IOS 为 MNWNNTSEE
- Android 为 MSTNW
tcp_window_scaling
os count 2 3 4 5 6 7 8
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 13 3 5 17
iPhone 16 1 5 10
iPad 12 7 5
Android 60 60
小结:
- Win
- xp 为 2
- 其余为 8
- IOS
集中在 3-6,目前 无法按此属性作为IOS子型号判断依据。
- Android 为 7
tcp_window_size
os count 29200 64240 65535 8192
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 38
iPhone 16 16
iPad 12 12
Android 60 22 38
小结:
- Win 可用于识别子系统型号
- xp 为 65535
- 7、8、8.1 为 8192
- 10 为 64240
- IOS 为 65535
- Android
- 部分为 29200 ,部分为 64240
ip_mf
os count ip_mf_0
Windows XP 2 2
Windows 7 3 3
Windows 8 2 2
Windows 8.1 2 2
Windows 10 4 4
Mac OS X 38 38
iPhone 16 16
iPad 12 12
Android 60 60
小结:
ip_mf 值等于0,未发现其他值。
按系统版本再次分析数据
主要针对 OS X(macos) 和 iOS 测试,看图子版本似乎有一定的分布规律,但按照目前的测算方法并无法去区分。
如果将 iOS 9 的一行原始数据带入进行测算,会得到一下结果:
……
["userAgent"]=>
string(133) "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
["os"]=>
array(1) {
["name"]=>
string(5) "iOS 9"
}
["platform"]=>
array(1) {
["type"]=>
string(10) "smartphone"
}
……
["macos"]=>
array(3) {
["score"]=>
float(12.236842105263158)
["count"]=>
int(38)
["sort"]=>
string(148) "[Mac 10.7]=15|[Mac 10.6]=15|[Mac 10.9]=12|[Mac 10.8]=12|[Mac 10.11]=12|[Mac 10.14]=12|[Mac 10.13]=12|[Mac 10.10]=12|[Mac 10.12]=11|[Mac 10.15]=10.25"
}
["ios/ipad"]=>
array(3) {
["score"]=>
float(10.107857142857142)
["count"]=>
int(28)
["sort"]=>
string(111) "[iOS 9]=15|[iPadOS 15]=10|[iOS 11]=10|[iOS 10]=10|[iOS 13]=10|[iOS 14]=10|[iOS 16]=10|[iOS 15]=10|[iOS 12]=9.67"
}
可以看到, Mac 10.7 ,Mac 10.6 和iOS 9 都获得了最好分,但系统平均评分依然是mac较高。这里的原因可能是 mac 的系统较于 ios 配置更加统一。
总结
- 可以识别系统大类,即
- linux/android
- window
- Apple os (OS X /iOS)
- win的子系统具有明显的差异,可以进行区分
- Apple OS 的设备无法进一步区分
- 由于缺少 linux 系统数据,Android 是否可以与lunix 桌面进行区分暂且不知。
注意:由于样本数量少,且都来自一个平台,结论仅供参考。