扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速

news2024/11/26 16:57:09

Cloudflare的CDN系统基本上每个站长都家喻户晓,大家都知道大陆对于搭建网站的审核力度,以至于Cloudflare并没有大陆的泛播节点,有也是只有香港节点。但是这些节点对于海外是加速效果,对于大陆就是一个字慢,晚高峰的情况下更是惨不忍睹。

这个时候就涉及到了又要免费又要好用又要延迟低,不严格的上来讲Cloudflare全占了,但是对于大陆网络环境来说就只是延迟高了一点,那么有没有什么办法使用Cloudflare保护我们的IP,体验它的加速效果和CDN服务,还能在大陆有一个良好的体验,再此之前会有人使用优选IP去接入,可能会有所优化 但是并不是一个特别好的解决办法,于是现在我们可以去使用哪些反代Cloudflare的IP进行一个加速效果。

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图

使用教程:

一个网站不仅仅是需要线路优秀,还是需要一台强悍的服务器来处理数据请求,服务器这里我推荐伍六七云:https://www.vps567.com/ 香港2H2G 5M服务器只需要20元

还有国内外高防服务器,免费虚拟主机以及全球CDN加速挂机宝等业务。

扩展阅读:Cloudflare 使用 CNAME 接入自定义域名

通过 CloudFlare+SaaS 回源优选 IP 使国内用户高速访问网站

Cloudflare for SaaS

看了 Cloudflare 官方文档并没有发现收费这一项目,可以添加100个域名,超出就收费0.1美金。

获取反代 IP:

首先我们打开:https://fofa.info 打开后大家可以先注册一个账号,后续大家可以导出下载。

参考搜索语法:

国内反代IP:server==“cloudflare” && port==“80” && header=“Forbidden” && country==“CN”

剔除CF:asn!=“13335” && asn!=“209242”

阿里云:server==“cloudflare” && asn==“45102”

甲骨文韩国:server==“cloudflare” && asn==“31898” && country==“KR”

搬瓦工:server==“cloudflare” && asn==“25820”

加速网站:

首先我们添加一个 A 记录解析,解析 IP 就是我们服务器真实 IP:

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图1

然后侧边栏 SSL/TLS - 自定义主机名:

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图2

回退源这里填写你刚刚解析的域名,保存后回退源状态为有效再来接下的操作:

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图3

再添加一个自定义主机名(你需要加速的域名):

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图4扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图5

证书验证方式有 HTTP 验证和 TXT 验证,大家自己随便选择一个就好了,然后你就会获取到像下图一样需要解析的内容:

扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图6扫描反代Cloudflare的IP 给网站CDN加速 免费制作自己的CDN加速插图7

把域名验证解析好了,再把你需要加速的域名解析 A 记录到反代 Cloudflare 的 IP 上就可以了,可以提供工具去筛选出再国内延迟比较低的 IP。

检查工具:

找 AI 写了一个 go 代码,可以筛选出正常 443 端口的节点 IP,复制下面的代码创建一个 go 文件,再创建好一个 ip.txt 和 443.txt. 在 ip.txt 写入你需要检查的 IP 节点就好了,正常的 IP 会写入到 443.txt 中。

package main

import (
    "bufio"
    "crypto/tls"
    "fmt"
    "net"
    "os"
    "strings"
    "sync"
    "time"
)

func main() {
    // 打开 ip.txt 文件
    file, err := os.Open("ip.txt")
    if err != nil {
        fmt.Println("无法打开文件:", err)
        return
    }
    defer file.Close()

    // 创建一个文件用于写入合格的 IP 地址
    outFile, err := os.OpenFile("443.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        fmt.Println("无法创建文件:", err)
        return
    }
    defer outFile.Close()

    // 创建一个 bufio.Scanner 用于逐行读取文件内容
    scanner := bufio.NewScanner(file)
    tasks := make(chan string, 5) // 并发任务通道
    results := make(chan string)  // 结果通道
    var wg sync.WaitGroup         // 等待所有任务完成

    // 开启并发任务处理
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go handleTask(tasks, results, &wg)
    }

    // 逐行读取文件内容并发送到并发任务通道
    for scanner.Scan() {
        ip := scanner.Text()
        tasks <- ip
    }

    // 关闭并发任务通道,等待所有任务完成
    close(tasks)
    go func() {
        wg.Wait()
        close(results)
    }()

    // 从结果通道中读取合格的 IP 地址并写入到文件中
    for ip := range results {
        outFile.WriteString(ip + "n")
    }

    if err := scanner.Err(); err != nil {
        fmt.Println("读取文件时发生错误:", err)
        return
    }

    fmt.Println("处理完毕,合格的 IP 已追加到 443.txt 文件中")
}

// 函数用于处理并发任务
func handleTask(tasks <-chan string, results chan<- string, wg *sync.WaitGroup) {
    defer wg.Done()
    for ip := range tasks {
        // 检查 IP 的 443 端口是否可访问,超时设置为 5 秒
        if isPortOpenWithTimeout(ip, "443", 5*time.Second) {
            // 如果 443 端口可访问,继续检查证书是否来自 cloudflare-dns.com
            if checkCertificate(ip, "cloudflare-dns.com") {
                // 如果证书来自 cloudflare-dns.com,写入到结果通道中
                fmt.Println(ip, "合格")
                results <- ip
            } else {
                fmt.Println(ip, "不合格,证书不是来自 cloudflare-dns.com")
            }
        } else {
            fmt.Println(ip, "不合格,443端口不可访问或超时")
        }
    }
}

// 函数用于检查指定 IP 和端口是否可访问,并设置超时时间
func isPortOpenWithTimeout(ip, port string, timeout time.Duration) bool {
    conn, err := net.DialTimeout("tcp", ip+":"+port, timeout)
    if err != nil {
        return false
    }
    defer conn.Close()
    return true
}

// 函数用于检查指定 IP 的证书是否来自指定的域名
func checkCertificate(ip, domain string) bool {
    config := tls.Config{ServerName: domain}
    conn, err := tls.Dial("tcp", ip+":443", &config)
    if err != nil {
        return false
    }
    defer conn.Close()

    // 获取证书
    certs := conn.ConnectionState().PeerCertificates
    if len(certs) < 1 {
        return false
    }

    // 检查证书是否匹配指定的域名
    for _, cert := range certs {
        if strings.Contains(cert.Subject.CommonName, domain) || cert.VerifyHostname(domain) == nil {
            return true
        }
    }
    return false
}

如果你要用,那么就需要忍受速度不稳定和随时不可用的情况,因为也会有人拿来加速节点 动不动去跑一些 4k8k 视频或者下载任务。而且有些节点本身就很慢这个时候我们使用就会是反向加速。于是拿出 AI 写了一个 go 代码。

img.a8tool.com 和 https://img.a8dog.com/i/2024/04/30/loux3b.jpg 修改成你自己的,jpg 文件建议有个 5M 或以上,到 go 程序同目录下创建一个 dns.txt 文件,写入测速节点 IP。

package main

import (
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "os/exec"
    "strings"
    "time"
)

// backupHostsFilePath 存储 hosts 文件的备份路径
var backupHostsFilePath = "C:\Windows\System32\drivers\etc\hosts.backup"

func main() {
    // 打开 DNS 文件
    dnsFile, err := os.Open("dns.txt")
    if err != nil {
        log.Fatalf("无法打开 DNS 文件:%v", err)
    }
    defer dnsFile.Close()

    // 读取 DNS 文件中的 IP
    ips, err := ioutil.ReadAll(dnsFile)
    if err != nil {
        log.Fatalf("无法读取 DNS 文件:%v", err)
    }

    // 创建日志文件
    logFile, err := os.OpenFile("dns.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        log.Fatalf("无法创建日志文件:%v", err)
    }
    defer logFile.Close()

    // 备份原 hosts 文件
    err = backupHostsFile()
    if err != nil {
        log.Fatalf("备份 hosts 文件失败:%v", err)
    }

    // 以行为单位遍历 IP
    ipList := strings.Split(string(ips), "n")
    for _, ip := range ipList {
        ip = strings.TrimSpace(ip)
        if ip == "" {
            continue
        }

        // 检查当前IP是否已经是目标IP
        if !checkHostIP("img.a8dog.com", ip) {
            // 修改本地 host 文件
            if err := modifyHosts("img.a8dog.com", ip); err != nil {
                log.Printf("修改 host 文件失败:%v", err)
                continue
            }

            // 刷新 DNS 缓存
            err := flushDNSCache()
            if err != nil {
                log.Printf("刷新 DNS 缓存失败:%v", err)
            }

            // 等待一段时间,确保 host 文件生效
            time.Sleep(5 * time.Second)

            // 再次检查当前IP是否已经是目标IP
            if !checkHostIP("img.a8dog.com", ip) {
                log.Printf("域名未指向目标 IP:%s", ip)
                continue
            }
        }

        // 删除旧的图片文件
        err := deleteFile("downloaded_image.jpg")
        if err != nil {
            log.Printf("删除旧的图片文件失败:%v", err)
        }

        // 下载图片
        start := time.Now()
        _, err = downloadFile("https://img.a8dog.com/i/2024/04/30/loux3b.jpg", "downloaded_image.jpg")
        if err != nil {
            log.Printf("下载图片失败:%v", err)
            continue
        }
        duration := time.Since(start)

        // 记录下载时间和下载速度
        speed := float64(fileSize("downloaded_image.jpg")) / duration.Seconds() / 1024 // KB/s

        // 打印记录信息并写入日志文件
        logMsg := fmt.Sprintf("IP: %s, 下载时间: %v, 下载速度: %.2f KB/s", ip, duration, speed)
        fmt.Println(logMsg)
        if _, err := logFile.WriteString(logMsg + "n"); err != nil {
            log.Printf("写入日志文件失败:%v", err)
        }

        // 恢复原 hosts 文件
        err = restoreHostsFile()
        if err != nil {
            log.Fatalf("恢复 hosts 文件失败:%v", err)
        }
    }
}

// 修改本地 hosts 文件
func modifyHosts(hostname, ip string) error {
    hostsFilePath := "C:\Windows\System32\drivers\etc\hosts"
    hostsFile, err := os.OpenFile(hostsFilePath, os.O_APPEND|os.O_WRONLY, 0644)
    if err != nil {
        return err
    }
    defer hostsFile.Close()

    _, err = hostsFile.WriteString(fmt.Sprintf("%s %sn", ip, hostname))
    if err != nil {
        return err
    }

    return nil
}

// 下载文件
func downloadFile(url, filename string) (int64, error) {
    resp, err := http.Get(url)
    if err != nil {
        return 0, err
    }
    defer resp.Body.Close()

    file, err := os.Create(filename)
    if err != nil {
        return 0, err
    }
    defer file.Close()

    size, err := io.Copy(file, resp.Body)
    if err != nil {
        return 0, err
    }

    return size, nil
}

// 获取文件大小
func fileSize(filename string) int64 {
    info, err := os.Stat(filename)
    if err != nil {
        return 0
    }
    return info.Size()
}

// 备份 hosts 文件
func backupHostsFile() error {
    src, err := os.Open("C:\Windows\System32\drivers\etc\hosts")
    if err != nil {
        return err
    }
    defer src.Close()

    dst, err := os.Create(backupHostsFilePath)
    if err != nil {
        return err
    }
    defer dst.Close()

    _, err = io.Copy(dst, src)
    if err != nil {
        return err
    }

    return nil
}

// 恢复 hosts 文件
func restoreHostsFile() error {
    src, err := os.Open(backupHostsFilePath)
    if err != nil {
        return err
    }
    defer src.Close()

    dst, err := os.Create("C:\Windows\System32\drivers\etc\hosts")
    if err != nil {
        return err
    }
    defer dst.Close()

    _, err = io.Copy(dst, src)
    if err != nil {
        return err
    }

    return nil
}

// 刷新 DNS 缓存
func flushDNSCache() error {
    cmd := exec.Command("ipconfig", "/flushdns")
    err := cmd.Run()
    if err != nil {
        return err
    }
    return nil
}

// 删除文件
func deleteFile(filename string) error {
    err := os.Remove(filename)
    if err != nil {
        return err
    }
    return nil
}

// 检查域名是否指向目标 IP
func checkHostIP(hostname, expectedIP string) bool {
    addrs, err := net.LookupIP(hostname)
    if err != nil {
        log.Printf("无法解析域名:%s", err)
        return false
    }
    for _, addr := range addrs {
        if addr.String() == expectedIP {
            return true
        }
    }
    return false
}

原文地址:https://www.4awl.net/6266.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Microsoft 365 for Mac v16.84 office365全套办公软件

Microsoft 365 for Mac是一款功能丰富的办公软件套件&#xff0c;为Mac用户提供了丰富的功能和工具&#xff0c;提高了工作效率和协作能力。Microsoft 365 for Mac是一款专为Mac用户设计的订阅式办公软件套件&#xff0c;旨在提高生产力和效率。 Microsoft 365 for Mac v16.84正…

去中心化金融与Web3:科技驱动的金融革命

随着区块链技术的发展和普及&#xff0c;去中心化金融&#xff08;DeFi&#xff09;作为其重要应用之一&#xff0c;正在成为金融领域的一场革命。结合Web3技术&#xff0c;去中心化金融正在以前所未有的方式重新定义着金融服务和产品的交付方式&#xff0c;推动着金融领域的创…

深入浅出(五)JsonCpp库

JsonCpp库 1. JsonCpp 库1.1 JsonCpp库下载 2. JsonCpp库编译与部署3. C示例 1. JsonCpp 库 JsonCpp 是一个开源的 C 库&#xff0c;用于解析、生成和操作 JSON 数据。它提供了简单易用的 API&#xff0c;使得在 C 程序中处理 JSON 数据变得方便和高效。以下是 JsonCpp 库的一…

如何使用SkyWalking收集分析分布式系统的追踪数据

Apache SkyWalking 是一个开源的观测性工具&#xff0c;用于收集、分析和展示分布式系统的追踪数据。SkyWalking 支持多种语言的追踪&#xff0c;包括但不限于 Java、.NET、Node.js 等。以下是使用 SkyWalking 工具实现数据采集的详细步骤&#xff1a; 1. 下载和安装 SkyWalkin…

开源模型应用落地-CodeQwen模型小试-探索更多使用场景(三)

一、前言 代码专家模型是基于人工智能的先进技术&#xff0c;它能够自动分析和理解大量的代码库&#xff0c;并从中学习常见的编码模式和最佳实践。这种模型可以提供准确而高效的代码建议&#xff0c;帮助开发人员在编写代码时避免常见的错误和陷阱。 通过学习代码专家模型&…

Python高级编程-DJango2

Python高级编程-DJango2 没有清醒的头脑&#xff0c;再快的脚步也会走歪&#xff1b;没有谨慎的步伐&#xff0c;再平的道路也会跌倒。 目录 Python高级编程-DJango2 1.显示基本网页 2.输入框的形式&#xff1a; 1&#xff09;文本输入框 2&#xff09;单选框 3&#xff…

[法规规划|数据概念]金融行业数据资产和安全管理系列文件解析(2)

“ 金融行业在自身数据治理和资产化建设方面一直走在前列。” 一直以来&#xff0c;金融行业由于其自身需要&#xff0c;都是国内开展信息化建设最早&#xff0c;信息化程度最高的行业。 在当今数据要素资产化的浪潮下&#xff0c;除了行业自身自身数据治理和资产化建设方面&am…

最强特征点检测算法 DeDoDe v1/v2

论文地址v1:https://arxiv.org/pdf/2308.08479 论文地址v1:https://arxiv.org/pdf/2404.08928 代码地址:GitHub - Parskatt/DeDoDe: [3DV 2024 Oral] DeDoDe 🎶 Detect, Dont Describe --- Describe, Dont Detect, for Local Feature Matching 实测确实牛X! DeDoDeV1 关…

网络安全之静态路由

以下是一个静态路由的拓扑图 Aping通B&#xff0c;C可以ping通D。 路由器转发数据需要路由表&#xff0c;但仍可以Aping通B&#xff0c;C可以ping通D&#xff0c;是因为产生了直连路由&#xff1a;产生的条件有两个&#xff0c;接口有IP&#xff0c;接口双up(物理up&#xff…

OpenGrok使用

以前都是用的find&#xff0c;或者VScode里面的浏览&#xff0c;但是到了Android这个就不行了&#xff0c;代码太多了。都在用OpenGrok&#xff0c;所以俺也用一下。 这里有两个步骤&#xff0c;一个是安装&#xff0c;是一个使用。 1 安装 大概看了一下&#xff0c;安装是to…

数据结构-线性表-应用题-2.2-9

线性表&#xff08;a1,a2,a3,...,an&#xff09;中的元素递增有序且按顺序存储于计算机内。要求设计一个算法&#xff0c;用最少的时间在表中查找数值为x的元素&#xff0c;若找到&#xff0c;则将其与后继元素位置相交换&#xff0c;若找不到&#xff0c;则将其插入表中并使表…

vue3+arco design通过动态表单方式实现自定义筛选

目录 1.说明 2.示例 3.运行截图 ​编辑 4.总结 1.说明 (1) 本文主要实现通过动态表单的方式实现自定义筛选的功能&#xff0c;用户可以自己添加筛选的项目&#xff0c;筛选条件及筛选内容。 (2) 每个项目的筛选包含筛选项目&#xff0c;筛选条件&#xff0c;筛选方式及筛选…

使用 OpenCV 创建视频(74)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV 库来捕获和处理视频输入和相似度测量(73) 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 每当您使用视频源时&#xff0c;您最终可能希望将图像处理结果保存为…

HDLC协议

目录 1.概念 2.配置 3.HDLC帧结构 4.HDLC帧类型 1.概念 HDLC(High-level Data Link Control&#xff09;高级数据链路控制位于链路层协议&#xff0c;传输单位是帧&#xff0c;它是一组用于在网络结点间传送数据的协议。其特点是各项数据和控制信息都以比特为单位&#xff…

C/C++程序设计实验报告综合作业 | 小小计算器

本文整理自博主本科大一《C/C程序设计》专业课的课内实验报告&#xff0c;适合C语言初学者们学习、练习。 编译器&#xff1a;gcc 10.3.0 ---- 注&#xff1a; 1.虽然课程名为C程序设计&#xff0c;但实际上当时校内该课的内容大部分其实都是C语言&#xff0c;C的元素最多可能只…

2024年第九届数维杯数学建模B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

六级段落匹配

一个段落最多匹配2个句子 一个段落对应&#xff1a;0-2 适当放题 找到三个对应点就可以选 每看三个句子划关键词之后再自己回忆一遍关键词&#xff0c;看了36 37 38 就复述一遍关键词看了39 40 41就又从36开始复述关键词&#xff08;334&#xff09;看到最后一句话就又从头…

测试平台开发:Django开发实战之注册界面实现(下)

1、 评论和用户建立关联 1&#xff09;修改model: 软关联还是硬关联默认值是什么关联方被删除怎么办如何根据评论找到用户如何根据用户找到评论 然后执行命令&#xff1a; pdm run M pdm run init 这样在表里面就会多一个user_id的字段 2&#xff09;修改视图&#xf…

电脑提示mfc140u.dll文件丢失了?怎么快速修复mfc140u.dll文件

当你的电脑提示你的mfc140u.dll文件丢失了&#xff0c;那么就要小心了&#xff0c;可能你的某些程序出问题了&#xff01;这时候需要我们去进行相关的修复&#xff0c;只有修复了这个mfc140u.dll文件&#xff0c;才能正常的使用某些程序。下面一起来了解一下mfc140u.dll文件吧。…

Deeplab的复现(pytorch实现)

DeepLab复现的pytorch实现 本文复现的主要是deeplabv3。使用的数据集和之前发的文章FCN一样&#xff0c;没有了解的可以移步到之前发的文章中去查看一下。 1.该模型的主要结构 对于代码部分&#xff0c;主要只写了模型部分的&#xff0c;其他部分内容基本和FCN的一致&#xf…