IsRealityFeasible 检查扫描结果是否符合Reality协议要求
()
| 115 | |
| 116 | // IsRealityFeasible 检查扫描结果是否符合Reality协议要求 |
| 117 | func (sr *ScanResult) IsRealityFeasible() bool { |
| 118 | // Reality协议的5个要求: |
| 119 | // 1. 使用 TLS 1.3 协议 |
| 120 | // 2. 使用 X25519 签名算法 |
| 121 | // 3. 支持 HTTP/2 协议(H2) |
| 122 | // 4. 不使用 CDN (特别是Cloudflare) |
| 123 | // 5. 中国境内可直接访问 |
| 124 | |
| 125 | if sr.TLSVersion != RequiredTLSVersion { |
| 126 | return false |
| 127 | } |
| 128 | |
| 129 | if sr.ALPN != RequiredALPN { |
| 130 | return false |
| 131 | } |
| 132 | |
| 133 | if sr.Curve != RequiredCurve { |
| 134 | return false |
| 135 | } |
| 136 | |
| 137 | if sr.CertDomain == "" { |
| 138 | return false |
| 139 | } |
| 140 | |
| 141 | // 检查证书域名是否有效 |
| 142 | if !isValidRealityDomain(sr.CertDomain) { |
| 143 | return false |
| 144 | } |
| 145 | |
| 146 | if sr.CertIssuer == "" { |
| 147 | return false |
| 148 | } |
| 149 | |
| 150 | // 检测是否使用Cloudflare CDN |
| 151 | if DetectCloudflareCDN(sr.CertDomain) { |
| 152 | return false |
| 153 | } |
| 154 | |
| 155 | // 检测域名连通性(如果启用) |
| 156 | if scanControl.PingDomain && !CheckDomainConnectivity(sr.CertDomain) { |
| 157 | return false |
| 158 | } |
| 159 | |
| 160 | return true |
| 161 | } |
| 162 | |
| 163 | // String 返回HostType的字符串表示 |
| 164 | func (ht HostType) String() string { |
no test coverage detected