MCPcopy Index your code
hub / github.com/MengMengCode/GetRealityDomain / DetectCloudflareCDN

Function DetectCloudflareCDN

scanner.go:256–309  ·  view source on GitHub ↗

DetectCloudflareCDN 检测是否使用Cloudflare CDN

(domain string)

Source from the content-addressed store, hash-verified

254
255// DetectCloudflareCDN 检测是否使用Cloudflare CDN
256func DetectCloudflareCDN(domain string) bool {
257 if domain == "" {
258 return false
259 }
260
261 // 方法1: 检查Cloudflare特有的/cdn-cgi/trace端点
262 url := fmt.Sprintf("https://%s/cdn-cgi/trace", domain)
263
264 // 创建HTTP客户端,设置较短的超时时间
265 client := &http.Client{
266 Timeout: 3 * time.Second,
267 }
268
269 // 发送请求
270 resp, err := client.Get(url)
271 if err == nil {
272 defer resp.Body.Close()
273
274 // 如果状态码是200,说明存在/cdn-cgi/trace端点
275 if resp.StatusCode == 200 {
276 // 读取响应内容进行进一步验证
277 body, err := io.ReadAll(resp.Body)
278 if err == nil {
279 bodyStr := string(body)
280 // 检查响应内容是否包含Cloudflare特征
281 if strings.Contains(bodyStr, "fl=") ||
282 strings.Contains(bodyStr, "h=") ||
283 strings.Contains(bodyStr, "colo=") ||
284 strings.Contains(bodyStr, "gateway=") {
285 return true
286 }
287 }
288 }
289 }
290
291 // 方法2: 检查HTTP响应头中的Cloudflare标识
292 resp2, err := client.Get(fmt.Sprintf("https://%s", domain))
293 if err == nil {
294 defer resp2.Body.Close()
295
296 // 检查响应头中的Cloudflare标识
297 server := resp2.Header.Get("Server")
298 cfRay := resp2.Header.Get("CF-Ray")
299 cfCache := resp2.Header.Get("CF-Cache-Status")
300
301 if strings.Contains(strings.ToLower(server), "cloudflare") ||
302 cfRay != "" ||
303 cfCache != "" {
304 return true
305 }
306 }
307
308 return false
309}
310
311// DetectCDN 检测是否使用CDN(通用实现)
312func DetectCDN(domain string) bool {

Callers 2

DetectCDNFunction · 0.85
IsRealityFeasibleMethod · 0.85

Calls 1

CloseMethod · 0.45

Tested by

no test coverage detected