前言
我近半年來被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 // 卸載並刪除服務
源代碼與軟件發布
源代碼
軟件發布