前言
我近半年來被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 // 解除安裝並刪除服務
原始碼與軟體釋出
原始碼
軟體釋出