Update AI Hosts/IPs

This commit is contained in:
SukkaW
2026-10-03 20:39:50 +08:00
parent f04a875de2
commit ca6a511098
3 changed files with 22 additions and 4 deletions

View File

@@ -1,11 +1,16 @@
import path from 'node:path';
import { fastIpVersion } from 'foxts/fast-ip-version'; import { fastIpVersion } from 'foxts/fast-ip-version';
import { SHARED_DESCRIPTION } from './constants/description'; import { SHARED_DESCRIPTION } from './constants/description';
import { SOURCE_DIR } from './constants/dir';
import { $$fetch } from './lib/fetch-retry'; import { $$fetch } from './lib/fetch-retry';
import { readFileIntoProcessedArray } from './lib/fetch-text-by-line';
import { RulesetOutput } from './lib/rules/ruleset'; import { RulesetOutput } from './lib/rules/ruleset';
import { SpanCategory, task } from './trace'; import { SpanCategory, task } from './trace';
const OPENAI_VOICE_IP_URL = 'https://openai.com/chatgpt-voice.json'; const OPENAI_VOICE_IP_URL = 'https://openai.com/chatgpt-voice.json';
const localAIIPRulesetPromise = readFileIntoProcessedArray(path.join(SOURCE_DIR, 'ip/ai.conf'));
function parseOpenAIVoiceJSON(data: unknown) { function parseOpenAIVoiceJSON(data: unknown) {
if ( if (
data === null data === null
@@ -70,14 +75,15 @@ export const buildAICIDR = task(require.main === module, __filename)(async (span
}, SpanCategory.Network); }, SpanCategory.Network);
return new RulesetOutput(span, 'ai', 'ip') return new RulesetOutput(span, 'ai', 'ip')
.withTitle('Sukka\'s Ruleset - ChatGPT Voice IP CIDR') .withTitle('Sukka\'s Ruleset - AI IP CIDR')
.appendDescription( .appendDescription(
SHARED_DESCRIPTION, SHARED_DESCRIPTION,
'', '',
'This file contains IP ranges used by ChatGPT Voice.' 'This file contains IP ranges used by AI services, including ChatGPT Voice.'
) )
.withDate(lastUpdated) // .withDate(lastUpdated) // With local source, we no longer use the upstream date for file date
.appendDataSource(`${OPENAI_VOICE_IP_URL} (last updated: ${lastUpdated.toISOString()})`) .appendDataSource(`${OPENAI_VOICE_IP_URL} (last updated: ${lastUpdated.toISOString()})`)
.addFromRuleset(localAIIPRulesetPromise)
.bulkAddCIDR4NoResolve(cidr4) .bulkAddCIDR4NoResolve(cidr4)
.bulkAddCIDR6NoResolve(cidr6) .bulkAddCIDR6NoResolve(cidr6)
.write(); .write();

9
Source/ip/ai.conf Normal file
View File

@@ -0,0 +1,9 @@
# $ custom_build_script
# Merged with the ChatGPT Voice IP ranges fetched in Build/build-ai-cidr.ts
# Add AI service IP rules below, e.g.
# IP-CIDR,192.0.2.0/24,no-resolve
# IP-CIDR6,2001:db8::/32,no-resolve
# >> Anthropic / Claude
IP-ASN,399358

View File

@@ -28,10 +28,13 @@ DOMAIN-KEYWORD,openai
# >> Perplexity # >> Perplexity
DOMAIN-SUFFIX,perplexity.ai DOMAIN-SUFFIX,perplexity.ai
# >> Claude # >> Anthropic / Claude
DOMAIN-SUFFIX,anthropic.com DOMAIN-SUFFIX,anthropic.com
DOMAIN-SUFFIX,claude.ai DOMAIN-SUFFIX,claude.ai
DOMAIN-SUFFIX,claude.com DOMAIN-SUFFIX,claude.com
# For the record, I don't believe Claude will use Short URLs to geo blocking.
# However, since there is some conspiracy theories surrounding it, I will include it.
DOMAIN-SUFFIX,clau.de
# >> Google # >> Google
# Gemini # Gemini