mirror of
https://github.com/SukkaW/Surge.git
synced 2025-12-13 01:30:37 +08:00
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { fetchRemoteTextByLine } from './lib/fetch-text-by-line';
|
|
import { processLineFromReadline } from './lib/process-line';
|
|
import path from 'path';
|
|
import { task } from './trace';
|
|
|
|
import { exclude, merge } from 'fast-cidr-tools';
|
|
import { getChnCidrPromise } from './build-chn-cidr';
|
|
|
|
// https://en.wikipedia.org/wiki/Reserved_IP_addresses
|
|
const RESERVED_IPV4_CIDR = [
|
|
'0.0.0.0/8',
|
|
'10.0.0.0/8',
|
|
'100.64.0.0/10',
|
|
'127.0.0.0/8',
|
|
'169.254.0.0/16',
|
|
'172.16.0.0/12',
|
|
'192.0.0.0/24',
|
|
'192.0.2.0/24',
|
|
// 192.88.99.0 // is currently being broadcast by HE and Comcast
|
|
'192.168.0.0/16',
|
|
'198.18.0.0/15',
|
|
'198.51.100.0/24',
|
|
'203.0.113.0/24',
|
|
'224.0.0.0/4',
|
|
'233.252.0.0/24',
|
|
'240.0.0.0/4'
|
|
];
|
|
|
|
export const buildInternalReverseChnCIDR = task(import.meta.path, async (span) => {
|
|
const cidrPromise = getChnCidrPromise();
|
|
const peeked = Bun.peek(cidrPromise);
|
|
const cidr: string[] = peeked === cidrPromise
|
|
? await span.traceChildPromise('download chnroutes2', cidrPromise)
|
|
: (peeked as string[]);
|
|
|
|
const reversedCidr = span.traceChildSync('build reversed chn cidr', () => merge(
|
|
exclude(
|
|
['0.0.0.0/0'],
|
|
RESERVED_IPV4_CIDR.concat(cidr),
|
|
true
|
|
).concat([
|
|
// https://github.com/misakaio/chnroutes2/issues/25
|
|
'223.118.0.0/15',
|
|
'223.120.0.0/15'
|
|
])
|
|
));
|
|
|
|
return Bun.write(path.resolve(import.meta.dir, '../List/internal/reversed-chn-cidr.txt'), `${reversedCidr.join('\n')}\n`);
|
|
});
|
|
|
|
if (import.meta.main) {
|
|
buildInternalReverseChnCIDR();
|
|
}
|