前言

我近半年来被github的抽风虐得没脾气了,虽然我有代理的方式来上网,但代理速度并不理想,而且有时代理服务一起跟着抽风。这时候,我会搜索“github访问不了”相关题材,其中有“Github镜像服务器加速版”的,但这种是readonly的,不适合要提交代码到github的人群;也有“ipaddress.com”查找ip然后写到host文件的,但查到的ip,并不是适合很有网络环境,或者这个ip一下子也抽风了。

FastGithub

如果拿到github的大量ip数据,我们可以写程序来检测哪些ip可用,哪些ip访问速度最佳,然后编写一个本地版的dns服务,当要解析github相关时,返回这个最佳ip,这就解决了github抽风的问题。

于是我根据这个原理,又闭关几天不吃不喝,将老夫多年练就的网络通讯技术功力融入其中,100+的commits之后,终于写出FastGithub这个软件,好东西自然要分享,好代码也自然也开源。

功能介绍

超大量的IP资源

FastGithub从github、各家公共dns服务器、ipaddress.com查找github相关的2w+个ip,这个查找工作,每间隔2小时之后重新进行一次。

快速的ip检测

FastGithub使用并行IO异步,快速检测ip的443端口是否开放,在速度与系统资源占用寻求一个平衡点,垃圾配置的电脑,cpu占用也不超过1%,但每秒可检测的ip至少为cpu核心数*2

微小的带宽占用

FastGithub的https扫描功能,会保持与复用http连接5分钟,同时使用HEAD请求扫描,带宽占用几乎不影响到系统。

智能的DNS设置

FastGithub能在多网络接口的电脑上选择用于上外网的一个网络接口,修改其dns地址为FastGithub提供的127.0.0.1,关闭FastGithub之后,dns地址恢复为原值。

多平台支持

FastGithub基于.net6编写,支持win-x86、win-x64、linux-x64和osx-x64,同时在windows上,还支持以windows服务运行,自带将自身安装为windows服务安装和卸载的启动命令。

支持加速其它域名

默认配置是为github专门配置的,但可以修改配置,用于支持非github的其它域名的抽风病,实际上github也不仅仅使用github.com这个域名。

配置介绍

{
"Dns": {
"UpStream": "114.114.114.114", // 上游dns
"GithubTTL": "00:10:00", // github相关域名解析结果的存活时长
"SetToLocalMachine": true // 是否设置本机使用此dns(仅支持windows)
},
"Github": {
"Lookup": { // ip查找
"Domains": [ // 查找的域名,下面是github最主要的域名
"github.com",
"api.github.com",
"collector.githubapp.com",
"github.githubassets.com",
"raw.githubusercontent.com",
"avatars.githubusercontent.com",
"favicons.githubusercontent.com"
],
"IPAddressComProvider": {
"Enable": true // 是从启用从address.com查找ip
},
"GithubMetaProvider": {
"Enable": true, // 是否从github获取ip列表
"MetaUri": "https://gitee.com/jiulang/fast-github/raw/master/FastGithub/meta.json"
},
"PublicDnsProvider": {
"Enable": true, // 是否需要从dns服务器查找ip
"Dnss": [ // dns服务器列表
"1.2.4.8",
"8.8.8.8",
"223.5.5.5",
"123.125.81.6",
"180.76.76.76",
"119.29.29.29",
"208.67.220.220",
"114.114.114.114"
]
}
},
"Scan": {
"FullScanInterval": "02:00:00", // 完整扫描时间间隔
"ResultScanInterval": "00:01:00", // 结果扫描时间间隔
"TcpScan": {
"Timeout": "00:00:01", // tcp扫描超时时间
"CacheExpiration": "00:30:00" // 扫描结果缓存时长
},
"HttpsScan": {
"Timeout": "00:00:05", // https扫描超时时间
"ConnectionClose": false, // 是否使用https短连接
"Rules": { // 域名扫描规则,缺失的域名,将默认HEAD请求到域名的根路径
"github.com": {
"Method": "HEAD",
"Path": "/xljiulang/FastGithub"
},
"github.githubassets.com": {
"Method": "HEAD",
"Path": "/favicons/favicon.png"
},
"raw.githubusercontent.com": {
"Method": "HEAD",
"Path": "/xljiulang/FastGithub/master/README.md"
},
"avatars.githubusercontent.com": {
"Method": "HEAD",
"Path": "/u/8308014?s=40&v=4"
},
"favicons.githubusercontent.com": {
"Method": "HEAD",
"Path": "/github.com"
}
}
}
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Warning"
}
}
}

使用方法

本机使用

  • 运行FastGithub程序,本机的网络适配器的dns会自动变成127.0.0.1
  • 如果网络适配器的dns没有变成127.0.0.1,请手工修改网络适配器的dns

局域网服务器使用(推荐)

  • 在局域网服务器运行FastGithub程序
  • 手工修改你电脑的网络适配器的dns,值为局域网服务器的ip

以windows服务运行

以管理员身份运行cmd,键入如下命令,其中D:\Softs为软件实际目录

  • D:\Softs\FastGithub.exe start // 安装并启动服务
  • D:\Softs\FastGithub.exe stop // 卸载并删除服务

源代码与软件发布

源代码

github上的FastGithub

软件发布

gitee上的FastGithub

让Github畅通无阻,FastGithub1.0.0发布的更多相关文章

  1. Castle Core 4.0.0 alpha001发布

    时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...

  2. MY SQL8.0里程碑发布

    MySQL 开发团队于 12 日宣布 MySQL 8.0.0 开发里程碑版本(DMR)发布! 可能有人会惊奇 MySQL 为何从 5.x 一下跳跃到了 8.0.事实上,MySQL 5.x 系列已经延续 ...

  3. GJM : Taurus.MVC 2.0 开源发布:WebAPI开发教程 [转载]

    Taurus.MVC 2.0 开源发布:WebAPI开发教程 转载自http://www.cnblogs.com/cyq1162/p/6069020.html 因是新手  粘贴时有一个版权问题 本文原 ...

  4. docker 1.0.0发布以及一个bug依赖apparmor_parser

    6月10号docker 1.0稳定版本发布,找了台ubuntu的机器,装了下 ubuntu version:12.04 docker version:1.0.0 装docker的步骤可以看官方文档:h ...

  5. Docker 1.12.0将要发布的新功能

    Docker 1.12.0将要发布的新功能 导读 按计划,6/14 是1.12.0版本的 feature冻结 的日子,再有两个星期Docker 1.12.0也该发布了.这里列出来的新功能,都是已经合并 ...

  6. Google 高性能 RPC 框架 gRPC 1.0.0 发布(附精彩评论)

    gRPC是一个高性能.开源.通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架. gRPC基于HTTP/2标准设计,带来诸如双向流.流控. ...

  7. 【AngularJS】 2.0 版本发布

    [AngularJS] 2.0 版本发布 w5cValidator[AngularJS] 2.0 版本发布   w5cValidator 插件基于angular原有的表单验证,在原有的基础上扩展了一些 ...

  8. 迷你MVVM框架 avalonjs 0.95发布

    迷你MVVM框架 avalonjs 0.95发布 本版本最主要的改进是ms-with 深层绑定的实现,至少,avalon1.0所有重要的feature已经开发完毕,之后就是小补小漏,性能优化了. ms ...

  9. 迷你MVVM框架 avalonjs 0.85发布

    迷你MVVM框架 avalonjs 0.85发布 本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件. fix scanNodes, 在 ...

随机推荐

  1. Spring Cloud Alibaba Nacos Discovery 实战

    Nacos 作为服务注册中心,可以快速简单的将服务自动注册到 Nacos 服务端,并且能够动态无感知的刷新某个服务实例的服务列表,为分布式系统提供服务注册与发现功能 一.创建服务 1.创建项目 pom ...

  2. JMeter四种参数化方式

    JMeter参数化是指把固定的数据动态化,这样更贴合实际的模拟用户请求,比如模拟多个不同账号.JMeter一共有四种参数化方式,分别是: CSV Data Set Config Function He ...

  3. [bug] Maven [WARNING] 'parent.relativePath' of POM

    参考 https://blog.csdn.net/simajinxiu/article/details/86667894

  4. 电脑无法开机,用一个U盘先备份C盘部分重要文件并重装Win10系统的教程?

    电脑无法开机,用一个U盘先备份C盘部分重要文件并重装Win10系统的教程.? 这应该是修电脑的万能方法,重装系统能解决绝大多数非硬件导致的电脑故障,但之前要备份一下桌面的一些个人文件.所以想学一下,以 ...

  5. 联想INTEL X86台式机 用光驱启动 usb光驱启动

    联想INTEL X86台式机  用光驱启动 usb光驱启动 启动项顺序 都要调整 主要顺序 自动顺序 出错顺序 按下f10 f12

  6. kylin的rowkey优化之调整rowkey顺序

    在以hbase为存储的cuboid中,会有很多计算好的数据行,这每个行的key都是由维度值按顺序生成的rowkey 而这个顺序,在我们做cube设计的时候是可以调整的. 具体调整路径是:cube de ...

  7. https 真的安全吗,可以抓包吗,如何防止抓包吗

    Android_interview github 地址 大家好,我是程序员徐公,加上实习,有五年中大厂经验.自荐一下,可以关注我的微信公众号程序员徐公 公众号程序员徐公回复黑马,获取 Android ...

  8. Lua时间互转

    1. 时间戳转成格式化字符串 直接利用函数os.date()将时间戳转化成格式化字符串. local timestamp = 1561636137; local strDate = os.date(& ...

  9. Nginx 配置实例-配置动静分离

    Nginx 配置实例-配置动静分离 1. 静态资源的创建 2. nginx 动静分离的配置 3. 验证 1. 静态资源的创建 这里使用的静态资源主要为 HTML 静态文件和图片. mkdir -vp ...

  10. 微信内 H5 页面自定义分享

    起源: 最近公司在做一个活动的h5页面,在微信内打开时需要进行微信授权,然后后端会重定向到这个页面并且携带了一些参数(openid等).问题是点击微信的原生分享时,会把携带的这些参数一起分享出去,等于 ...