原理
修改本地host文件来加速访问github.
如何获取在中国的github代理ip地址?
我找到了这个网站: http://ping.chinaz.com/github...
具体思路就是和上面网站一样,循环请求接口获取各地机房的延迟,然后比较出最低延迟的机房,拿到ip, 再去修改本地Host文件, go.
获取请求接口
到这个网站 http://ping.chinaz.com/github... 很快就能找到相似点。得出接口如下:
get http://ping.chinaz.com/iframe.ashx
其中,最关键的是guid, 其余参数照抄即可。
关于guid, 右键源代码,发现guid全在id为speedlist
的元素下。
通过以下代码获取所有机房的guid
var a = Array.from($0.children).map(v => v.getAttribute('id'))
copy(a)
最终的数据
[
"4daa81e2-f397-4cde-bf74-b2bee84a4ea5",
"95b30a9e-f797-46ae-b9ef-268692caddf6",
"eeb78862-50d4-4823-94f2-6de143374a27",
"403d18aa-9a0f-4d3c-b175-f4a10683deb9",
"32574c06-d0fc-4709-8fc9-fce30596efd3",
"c665eba1-e4a0-4da3-a438-404768bb5fd6",
"b81dffbf-3644-43a3-bf29-099816488ba2",
"252167a8-eaeb-491b-a4f3-319d25680f48",
"db8eb6ed-734e-4747-a526-d6c8b408acb5",
"aaeb0b79-c13c-48b8-abc8-ae8ce1ec7f65",
"4a40427f-502e-4a85-8752-980f2d8bbae1",
"0003d32b-8585-4480-b0ea-dd0a10768dd2",
"0209986e-259b-4817-9d17-2418bb5b0756",
"e6a3a9b7-2088-41be-bf1d-6a25276ab1ed",
"6a3749de-aa34-4b7f-96c8-f28b9a32238b",
"8fbd45ea-7fe2-43f5-84aa-cd3921475732",
"efa326df-41dd-4c7f-af5e-bd7572658d82",
"1f430ff0-eae9-413a-af2a-1c2a8986cff0",
"ca6e017e-17b8-45eb-94b3-a408b8b79f1c",
"4d7637d7-4950-4b79-9741-c397789bcf05",
"0f885910-80d6-4f77-8f4f-3d90d8779d17",
"fcb3c928-222c-45dc-b2cd-85508e385b65",
"74cb6a5c-b044-49d0-abee-bf42beb6ae05",
"604e79e8-f0ad-40a3-ad30-fc2c55b78943",
"5802da93-4e05-4932-9bc6-20d5d75b7af5",
"61ceba20-2cb1-4482-9e48-acbe876bd3ba",
"7f46f5c9-d719-4886-b3c0-6b6427908791",
"415ce02c-b3e9-4cad-adbd-baab32d63edc",
"0e519c9d-dab8-480c-a372-c72480dd133a",
"df8bdd7a-b928-41f8-959f-d0d56fadea64",
"17d812b5-ced1-4717-8669-51ce10615682",
"5d20130d-75e0-481e-a651-c3da8656a3b3",
"766a3283-4add-438d-a5bb-e8b6cef139c3",
"2140cc66-e5ea-4f56-981a-8f044a98c92a",
"8d8e4cbb-10de-4573-bb56-1dd7e36feaf3",
"36317cda-2716-49e0-9cd0-4baaa0cacaf3",
"56d53df5-2784-4b70-b268-6594a216109b",
"14ef4fcf-3712-4971-9c24-0d1657751022",
"ec83c2ca-95ec-40ba-aabe-a9b6f3da8fff",
"24ad8183-b682-4c00-8d58-b73b47d558ca",
"0d3fd0b2-1255-4e5d-b94e-717569d2e8bd",
"96bcf0f8-dccc-4a66-9ce1-a5107b8779a8",
"74c25181-4087-459a-8035-67278afaa2f1",
"df61b0a8-f88e-4959-9e4e-c33101f4de2e",
"b615642c-ac86-4322-9fbe-4bd79e175a99",
"9cd12aba-b71d-4cfd-92a4-4447745ee9e1",
"f3edbd07-fc92-4333-8626-4f6f4ce49b0b",
"0fb19ea5-4a8e-49ec-b248-59dabf586245",
"9bc90d67-d208-434d-b680-294ae4288571",
"0caa7b64-4a66-4de2-b4d9-0f7d537cd8ae",
"942de632-7962-41e5-961b-c7ad98b31c5a",
"fb715e9d-f578-41bd-b95f-75cc3fe69cf2",
"5713f157-3378-495a-9c55-7172187e9f36",
"316c5129-231d-4494-a81f-e49d14de9a81",
"3a8de27a-c93e-4f97-9b67-f2b5b2028eb8",
"3bafbbb2-dc57-4de7-8ef6-20402b881dbe",
"5074fb13-4ab9-4f0a-87d9-f8ae51cb81c5",
"47b7ab69-0008-4dae-8d99-54f7038f1510",
"9280a6f4-f3c6-4173-a77d-c2bdaac3e709",
"07f2f1cc-8414-4557-a8c1-27750a732f16",
"012834d4-5a15-4a90-9520-8515e558873f",
"6c84b028-554b-49f4-87bd-4f15f3eed735",
"eb7215a6-7f0e-4bf7-89fe-ec0e7ee9f32c",
"19ef9d71-e0cb-4b79-a416-8fd670f6e7ca",
"945fcfae-276a-4e42-9133-4d47d2999b08",
"ea551b59-2609-4ab4-89bc-14b2080f501a",
"a936bb02-6b19-4da5-9c82-e8bb68fcfbea",
"703e401a-1e50-4bda-9c82-b1ca883e3bbf",
"2805fa9f-05ea-46bc-8ac0-1769b782bf52",
"b698f5c4-0c88-4ae4-b123-ef57293ce442",
"9c137190-5a57-4ef5-be4b-b9add998ad52",
"0bf6e659-226e-40b1-b605-962929e9fba8",
"4d462057-4581-4ae1-974d-ca7ca019e700",
"e91e73db-703d-464d-a82a-1e8286a19cb1",
"a1fa84e1-aeb5-4909-aac8-d6f0d7e45456",
"f8205979-1951-4f20-a66e-2f2ca97cf75b",
"11bd620a-7456-4835-9129-038eaa9fa8b9",
"dc440a55-1148-480f-90a7-9d1e0269b682",
"3ce7a84d-191b-49a2-81a6-e32bbe2c06a0",
"8c0b720b-e1a1-4422-a948-e8d7ec7e4906",
"9365c01e-163f-4f07-b569-a9302b685c30",
"8ebdf782-2203-4bc2-9774-68fe0d3691c8",
"5bea1430-f7c2-4146-88f4-17a7dc73a953",
"6e5e03b3-d8d6-48bc-a87a-033f7c877b33",
"12b16bb6-d42d-4296-a394-b96b22bca9c3",
"6305bac1-7adb-48cf-aff2-d3ac2dd65dde",
"8fef9cd0-af0b-4beb-b0b0-37388c74a2ae",
"d434f9dd-c862-47e0-89cf-3633aa061509",
"38ecaef6-76e4-4030-bd7f-af9e6240f4b6",
"483bad95-d9a8-4026-87f4-7a56501bf5fd",
"87c200e0-0059-479f-8103-e9e504f735d0",
"bd3b89bd-aeec-4079-8c08-a86770abb830",
"cb22befe-58f9-45f6-a246-4ad66bcfa448",
"08117724-8437-4ebb-88ae-93e50f660867",
"cb9069aa-c897-4f27-bc36-988da8f4cb03",
"9d5f55d6-ad1a-4efb-b368-c7de4b7005c5",
"6c5f2077-b898-4918-86b0-9ab82273eea6",
"040d7a4f-3c04-462f-9e96-2bf629af4a08",
"cdcf3a45-8366-4ab4-ae80-75eb6c1c9fca",
"91937e5b-1db0-47b5-b114-c9294694f377",
"c1b98ee7-8584-4e98-8e6d-049a633b6bdf",
"eac78784-07a1-4869-be7c-3870a8dcebfc",
"7b578630-b705-42dc-936f-8d4703b955ac",
"e33f289c-f401-449b-a135-e654e597b150",
"737831b4-95e1-445f-a981-c1333faf88bd",
"39bed414-9402-4266-aa9a-8252e958558f",
"54a02700-5812-4ec8-8d24-c4276c7eb080",
"5c02bccc-ae5c-45ef-9204-b3055f985e20",
"95d0626d-dc85-48c0-b3a9-e656811d3028",
"2b0dc147-1f6c-405c-b91f-faff417cf1da",
"b2bbe313-d66d-47a3-ace2-d1229da5c28c",
"774af056-e15d-4689-83f7-e5067a0c5512",
"80a828bd-19ed-48c3-a035-e69f6468da03",
"5fb9012d-b47c-4087-84a2-0b0dfa8c94ab",
"e11f1b36-2995-413c-90bb-9f3afff8caed",
"38806ef7-4638-4808-96e4-85047dfa5853",
"53e79941-312c-4343-8739-6be3cd105805",
"02a01d5d-5111-481f-aade-e999a584d8a4",
"352ba952-a177-4a65-b35c-184f080181cf",
"29d2a14f-accc-43b8-9444-fd6b9e7902bc",
"e7ddd974-711f-4fea-90cd-3a89600a72b8",
"458d74e3-6349-4d58-918b-3d8b4bdf7a6c",
"e4f8c1ef-2160-47f7-850f-6446ca0680b4",
"c7d37949-9b15-48a7-a9f3-19f04fe20752",
"5cddb7c6-3a78-4ae8-9472-28d31c61b803",
"d8d0e98b-e201-4cd4-a392-48a3142e4bfc",
"a0be885d-24ad-487d-bbb0-c94cd02a137d",
"04cd8a98-2f21-4fe2-805f-bd663ca2cc5e",
"dc440a55-1148-480f-90a7-9d1e0269b682",
"1f4c5976-8cf3-47e7-be10-aa9270461477",
"d9041619-7d90-42ea-9811-2b2fe11cb2b0",
"6323e95e-408a-4598-b6d2-cc44aa64c6f0",
"1e375923-e5ee-491e-ba21-621a95ef9de9",
"54f7f313-1a14-4075-b52a-8513811541a6"
]
代码
const axios = require('axios');
const QueryString = require('qs');
const server = require('./server');
const hosts = require('hosts-group');
const dns = require('dns')
console.log('正在查询机房信息...')
Promise.all(server.map(s => {
return axios({
url: 'http://ping.chinaz.com/iframe.ashx',
params: {
t: 'ping'
},
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data: QueryString.stringify({
guid: s,
host: 'github.com',
ishost: '0',
isipv6: '0',
encode: 'vLtCvLxV07f5qlRYHoLFBPaKNX8OZFnP',
checktype: '0'
})
})
})).then(res => {
const finalTime = res.map(v => v.data).reduce((acc, val) => {
const data = eval(val)
if (!data.state) return acc
const time = data.result.responsetime
const stime = Number(time.substring(0, time.length - 2))
if (isNaN(stime)) return acc
if (acc && acc.result && acc.result.responsetime) {
const accdata = eval(acc)
const acctime = accdata.result.responsetime
const accstime = Number(acctime.substring(0, acctime.length - 2))
if (stime >= accstime) {
return accdata
}
} else {
return data
}
})
if (finalTime) {
console.log('查询机房成功, 延迟最低的机房为: ', finalTime);
} else {
console.error('查询机房信息失败,可能是网络波动引起的,建议重试...')
process.stdout.write("任意字符结束进程")
process.stdin.on('data', () => {
process.exit(0);
})
return
}
console.log('正在设置DNS...')
dns.lookup('github.com', (err, result) => {
hosts.remove('github.com', result)
hosts.set('github.com', finalTime.result.ip)
console.log('成功! 打开github.com进行检验')
process.stdout.write("任意字符结束进程")
process.stdin.on('data', () => {
process.exit(0);
})
})
}).catch(e => {
console.error('查询失败, 信息为: ', e)
})
用到了以下库:
- axios
- hosts-group
- qs
使用
在管理员的命令行中,运行此js文件
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。