build-sgmodule-always-realip.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import path from 'path';
  2. import { task } from './trace';
  3. import { compareAndWriteFile } from './lib/create-file';
  4. const HOSTNAMES = [
  5. // Intranet
  6. '*.lan',
  7. '*.localdomain',
  8. '*.localhost',
  9. '*.home.arpa',
  10. // Network Detection, Captive Portal
  11. 'msftncsi.com',
  12. 'msftconnecttest.com',
  13. '*.msftncsi.com',
  14. '*.msftconnecttest.com',
  15. 'network-test.debian.org',
  16. 'detectportal.firefox.com',
  17. 'resolver1.opendns.com',
  18. '*.ipv6.microsoft.com',
  19. // Handle SNAT conversation properly
  20. '*.srv.nintendo.net',
  21. '*.stun.playstation.net',
  22. 'xbox.*.microsoft.com',
  23. '*.xboxlive.com',
  24. 'turn.twilio.com',
  25. '*.turn.twilio.com',
  26. 'stun.twilio.com',
  27. '*.stun.twilio.com',
  28. 'stun.syncthing.net',
  29. 'stun.*.*',
  30. 'stun.*.*.*',
  31. 'controlplane.tailscale.com',
  32. // NTP
  33. 'time.*.com', 'time.*.gov, time.*.edu.cn, time.*.apple.com', 'time1.*.com', 'time2.*.com', 'time3.*.com', 'time4.*.com', 'time5.*.com', 'time6.*.com', 'time7.*.com', 'time8.*.com', 'time9.*.com, ntp.*.com, ntp1.*.com, ntp2.*.com, ntp3.*.com, ntp4.*.com, ntp5.*.com, ntp6.*.com, ntp7.*.com', 'time1.*.com', 'time2.*.com', 'time3.*.com', 'time4.*.com', 'time5.*.com', 'time6.*.com', 'time7.*.com', 'time8.*.com', 'ti me9.*.com', '*.time.edu.cn', '*.ntp.org.cn', '*.pool.ntp.org', 'time1.cloud.tencent.com',
  34. // AdGuard
  35. 'local.adguard.org',
  36. 'injections.adguard.org',
  37. // QQ Login
  38. 'localhost.ptlogin2.qq.com',
  39. 'localhost.sec.qq.com',
  40. 'localhost.work.weixin.qq.com',
  41. // Microsoft Auto Discovery
  42. 'PDC._msDCS.*.*',
  43. 'DC._msDCS.*.*',
  44. 'GC._msDCS.*.*',
  45. // Misc,
  46. '*.battlenet.com.cn',
  47. '*.blzstatic.cn',
  48. '*.battlenet.com'
  49. ] as const;
  50. export const buildAlwaysRealIPModule = task(import.meta.path, async (span) => {
  51. return compareAndWriteFile(
  52. span,
  53. [
  54. '#!name=[Sukka] Always Real IP Plus',
  55. `#!desc=Last Updated: ${new Date().toISOString()}`,
  56. '',
  57. '[General]',
  58. `always-real-ip = %APPEND% ${HOSTNAMES.join(', ')}`
  59. ],
  60. path.resolve(import.meta.dir, '../Modules/sukka_common_always_realip.sgmodule')
  61. );
  62. });
  63. if (import.meta.main) {
  64. buildAlwaysRealIPModule();
  65. }