Motivos da pontuação de risco: como ler detection_methods campo a campo
Motivos da pontuação de risco, campo a campo: cada valor de detection_methods que o nosso código de pontuação retorna, o seu peso e uma consulta real em que um rastreador verificado reduziu 64 para 35.

Um cliente é bloqueado no checkout e escreve perguntando por quê. "Nosso fornecedor disse 92" encerra a conversa mal. "A sua conexão veio de um servidor de VPN listado com uma porta OpenVPN aberta" é uma resposta que você pode sustentar, reconsiderar ou ajustar. É isso que uma pontuação de fraude explicável oferece: códigos de motivo, não apenas um número.
Esta página é o dicionário dessas respostas. Para saber o que o número em si significa e onde ficam as faixas, comece por o que é uma pontuação de fraude de IP e como lê-la. Abaixo mostramos a aritmética, rastreamos uma resposta real motivo por motivo, tratamos dos cinco motivos que subtraem e listamos cada valor de detection_methods que o nosso código de pontuação pode retornar, com o seu peso e o que o faz disparar.

Os motivos da pontuação de risco se somam: pontos vezes confiança, depois um limite
Na pontuação do GeoIPHub, cada motivo contribui com os seus pontos multiplicados pela sua confiança, e a pontuação é o total arredondado, limitado entre 0 e 100. Não há nenhum modelo oculto por cima. Esta é a etapa de pontuação da nossa API (scoring.service.ts), reduzida à sua aritmética:
// Each fired reason: { points, confidence } from scoring.json
let sum = fired.reduce((s, r) => s + r.points * r.confidence, 0);
if (isCgnat && !ownThreatEvidence) sum = Math.min(sum, 50); // CGNAT cap
if (isRelay) sum = Math.min(sum, 60); // relay cap
const fraud_score = Math.max(0, Math.min(100, Math.round(sum)));
const confidence = fired.length === 0 ? 0.1
: Math.min(0.99, Math.abs(sum) / fired.length / 50 + fired.length * 0.05);
Dois detalhes confundem as pessoas. Primeiro, o confidence na resposta não é a probabilidade de fraude. Ele cresce com o número de motivos e o tamanho médio deles, então quatro motivos modestos podem ter mais confiança do que um grande. Uma consulta sem motivos retorna 0,1. Segundo, a ordem de detection_methods é a ordem em que o código os verifica, não o tamanho deles. Não trate a primeira entrada como o motivo principal.
Outros fornecedores expõem os motivos de forma diferente. As respostas do minFraud da MaxMind trazem risk_score_reasons: multiplicadores sobre a pontuação de risco, cada um com códigos como ANONYMOUS_IP, e a MaxMind observa que eles "geralmente só são retornados para transações de risco médio a alto". O Sigma Identity Fraud da Socure combina uma pontuação entre 0,001 e 0,999 com códigos de motivo que "fornecem informações detalhadas para ajudar você a entender os fatores que influenciaram a pontuação de risco de fraude". Os motivos do GeoIPHub são pontos aditivos, e todo motivo que mexeu na pontuação é listado, seja qual for a pontuação.
Verificamos que a aritmética se mantém com dados ao vivo. Estas sete consultas sem chave foram feitas em 29/10/2026 entre 04:43:09 e 04:43:54 UTC, com cerca de sete segundos de intervalo, e cada pontuação e confiança se reconstrói exatamente a partir dos seus motivos:
| IP (o que é) | detection_methods | Soma | Pontuação, ação | confidence |
|---|---|---|---|---|
| 185.220.101.1 (saída Tor) | tor_exit, datacenter_blocklisted, no_ptr_datacenter, known_spammer | 108.05 | 100, block | 0.74 |
| 185.213.155.73 (Mullvad, na lista dela) | known_vpn_server, wireguard_open, datacenter_with_vpn_proxy, no_ptr_datacenter | 101.5 | 100, block | 0.71 |
| 5.39.1.230 (AhrefsBot) | datacenter_blocklisted, no_ptr_datacenter, verified_crawler, known_spammer | 35.0 | 35, review | 0.375 |
| 45.33.32.156 (scanme.nmap.org, Linode) | datacenter_ip | 10.0 | 10, allow | 0.25 |
| 104.28.46.99 (iCloud Private Relay) | relay_ip | 8.5 | 9, allow | 0.22 |
| 107.178.192.1 (fetcher do Google acionado por usuário) | datacenter_ip, rdns_hosting, verified_crawler | -12.5 | 0, allow | 0.23 |
| 66.249.66.1 (Googlebot) | datacenter_ip, verified_crawler | -18.5 | 0, allow | 0.285 |
Rastreando uma resposta real: AhrefsBot com 35, review
O 5.39.1.230 do AhrefsBot teve pontuação 35, review, porque três motivos somaram 63,5 pontos e a correspondência de rastreador verificado tirou 28,5. É o melhor caso didático porque os motivos puxam em direções opostas. Aqui está a resposta recortada da consulta das 04:43:09 UTC (meta.last_classified_at 2026-10-29T04:43:09.547Z), com os valores sem edição:
curl https://api.geoiphub.com/v1/lookup/5.39.1.230 \
-H "x-api-key: YOUR_API_KEY"
{
"ip": "5.39.1.230",
"asn": { "asn": 16276, "org": "OVH - OVH SAS", "asn_type": "hosting" },
"detection": { "is_vpn": false, "is_proxy": false, "is_hosting": true },
"threat": {
"is_spammer": true,
"dnsbl_sources": ["zen.spamhaus.org"],
"crawler": {
"verified": true,
"name": "AhrefsBot",
"operator": "Ahrefs",
"verification_method": "ip_range_list"
}
},
"dns": { "ptr_record": "none" },
"scoring": {
"fraud_score": 35,
"confidence": 0.375,
"recommended_action": "review",
"detection_methods": ["datacenter_blocklisted", "no_ptr_datacenter", "verified_crawler", "known_spammer"]
}
}
Cada motivo corresponde a uma linha de aritmética:
| Motivo | Por que disparou aqui | Pontos × confiança | Soma |
|---|---|---|---|
| datacenter_blocklisted | Endereço de hospedagem da OVH que também está em uma lista de spam | 30 × 0.75 | +22.5 |
| no_ptr_datacenter | Endereço de hospedagem sem DNS reverso nos nossos registros | 10 × 0.50 | +5.0 |
| verified_crawler | Dentro das faixas de IP de rastreador publicadas pela Ahrefs | -30 × 0.95 | -28.5 |
| known_spammer | Listado em zen.spamhaus.org | 40 × 0.90 | +36.0 |
| Total | 35.0, review |
Tire a correspondência de rastreador e a soma é 63,5, que arredonda para 64: step up. O arquivo de faixas verificado levou um rastreador real e declarado de um desafio para uma revisão registrada. Não o levou para allow, porque um motivo atenuante é um peso, não uma allowlist. Uma listagem na Spamhaus no mesmo endereço continua contando.
Onde esta resposta está errada
Um dos quatro motivos é uma lacuna nossa. no_ptr_datacenter diz que o endereço não tem DNS reverso, mas dig -x 5.39.1.230 às 04:44 UTC retornou proxy-fr005-cip7.ahrefs.net. O motivo lê os nossos registros PTR armazenados, e esse registro está faltando.
Corrigir a lacuna não reduziria essa pontuação, e o código mostra por quê. O nosso classificador de PTR lê qualquer hostname que contenha "proxy" como um padrão de proxy. Então, com o registro armazenado, no_ptr_datacenter (+5) seria substituído por rdns_proxy (+14), e a pontuação subiria para pelo menos 44. Continua sendo review, mas por causa de um hostname que a Ahrefs escolheu para a saída do seu rastreador, não por um anonimizador. Registramos as duas coisas. Leia no_ptr_datacenter e os motivos rdns_* como evidências fracas, que é o que os pesos deles já dizem.
Motivos atenuantes: cinco podem subtrair, e param em zero
Os motivos atenuantes têm pontos negativos, então reduzem a soma, mas a pontuação nunca cai abaixo de 0. A configuração de pontuação do GeoIPHub tem seis deles, e cinco podem disparar hoje:
| Motivo | Pontos × confiança | Subtrai | Dispara quando |
|---|---|---|---|
| verified_crawler | -30 × 0.95 | 28.5 | O endereço está dentro de um dos 19 arquivos oficiais de faixas de IP de rastreadores (Googlebot, Bingbot, GPTBot, ClaudeBot, AhrefsBot e outros) |
| residential_isp | -20 × 0.85 | 17 | Linha de banda larga doméstica sem evidência de VPN, proxy ou Tor |
| rdns_residential | -20 × 0.80 | 16 | O DNS reverso parece de uma linha doméstica (dsl, pool, dynamic, cable, customer) |
| mobile_carrier | -15 × 0.80 | 12 | Rede móvel (dados da operadora, um hostname móvel ou o nosso sinalizador de CGNAT) sem evidência de anonimizador |
| rdns_mobile | -10 × 0.70 | 7 | O DNS reverso parece de uma rede móvel |
| rdns_cgnat | -15 × 0.70 | 10.5 | Nunca dispara hoje: o nosso classificador de hostnames não tem padrão de CGNAT |
O desconto de rastreador verificado aparece na consulta do Googlebot. datacenter_ip somou 10, verified_crawler tirou 28,5 e a API retornou 0. O saldo de menos 18,5 é descartado. Ele não vira crédito contra um motivo posterior, e esse é o comportamento certo: uma faixa verificada não deveria conseguir esconder uma listagem de botnet. Os 19 arquivos de faixas por trás de verified_crawler estão listados, com as suas datas e um gerador de allowlist, na nossa lista de IPs de rastreadores verificados; como verificar o Googlebot por IP trata dos arquivos do Google em detalhe.
Não podemos mostrar o desconto residencial em um endereço ao vivo, porque publicar a consulta de uma conexão doméstica identificaria uma família. Então aqui está o caminho do código em texto. Os motivos residenciais dependem do DNS reverso: o nosso código só considera uma linha residencial quando o hostname PTR dela corresponde a um padrão doméstico como dsl, pool ou dynamic. Quando isso acontece, a menos que a linha também esteja sinalizada como móvel ou CGNAT, residential_isp (-17) e rdns_residential (-16) disparam juntos, somando menos 33. Uma linha móvel ou de CGNAT recebe mobile_carrier (-12) no lugar de residential_isp, então esse par soma menos 28. Uma linha doméstica cujo ISP não publica DNS reverso, ou nomeia os hosts em um padrão que não reconhecemos, não recebe nenhum dos descontos. Sem mais nada contra ela, simplesmente tem pontuação 0. É a mesma pontuação, então a lacuna só importa quando outros motivos disparam.
Os descontos também se invertem. Se uma linha residencial tem evidência de proxy, Tor ou protocolo de VPN (uma marcação de IPsec sozinha não conta), residential_isp é substituído por residential_with_threat (+21,25). Uma linha móvel faz o mesmo com mobile_with_threat (+16). Um desconto por parecer uma casa é retirado no momento em que a casa começa a retransmitir tráfego.
Dois limites ficam ao lado dos descontos. Um endereço de relay é limitado a 60, então uma saída do iCloud Private Relay nunca chega a block; explicamos como detectar o tráfego do Private Relay e do WARP e por que deixá-lo passar. Um endereço que a nossa etapa de CGNAT sinaliza é limitado a 50, a menos que tenha evidência própria de VPN, proxy, Tor, protocolo de VPN, botnet ou abuso.
Cada valor de detection_methods, campo a campo
O código de pontuação do GeoIPHub pode nomear 41 motivos, e 36 deles podem aparecer em uma resposta hoje. As tabelas abaixo listam todos os 36 com os seus pontos, confiança e contribuição, agrupados pela pergunta que cada um responde.
O endereço é um anonimizador? Estes vêm da lista de saídas do Tor Project, das listas de servidores publicadas pelos provedores, das nossas próprias sondagens de protocolo e de uma lista de proxies de terceiros. As sondagens cobrem SOCKS5, SOCKS4, HTTP CONNECT, HTTP forward, OpenVPN, IKE (v1 e v2), PPTP e L2TP. Não há sondagem de WireGuard.
| Valor de detection_methods | Pontos × confiança | Soma | O que significa |
|---|---|---|---|
| tor_exit | 45 × 0.99 | 44.55 | Está na lista oficial de saídas do Tor Project, relida a cada 6 horas |
| known_vpn_server | 40 × 0.90 | 36 | is_vpn é true: está na lista de servidores de um provedor, dentro de uma rede que sabemos que roda servidores de VPN, ou respondeu à nossa sondagem de protocolo de VPN |
| multi_source_vpn | 30 × 0.85 | 25.5 | Uma VPN cujo registro WHOIS ou RDAP também tem palavras-chave de VPN, então duas fontes concordam |
| openvpn_open | 35 × 0.90 | 31.5 | A nossa sondagem recebeu uma resposta OpenVPN do endereço |
| ipsec_open | 30 × 0.80 | 24 | A nossa sondagem recebeu uma resposta IKE, ou a lista de servidores do provedor marca o servidor para IKEv2 (as listas da NordVPN, da Surfshark e da Windscribe fazem isso) |
| pptp_open | 30 × 0.92 | 27.6 | A nossa sondagem recebeu uma resposta PPTP |
| l2tp_open | 30 × 0.85 | 25.5 | A nossa sondagem recebeu uma resposta L2TP |
| wireguard_open | 35 × 0.70 | 24.5 | A lista de servidores publicada pelo provedor de VPN marca este servidor como WireGuard. Não é um handshake |
| socks5_open | 35 × 0.95 | 33.25 | Um proxy SOCKS5 ou SOCKS4 respondeu à nossa sondagem |
| http_proxy_open | 35 × 0.95 | 33.25 | Um proxy HTTP CONNECT ou HTTP forward respondeu à nossa sondagem |
| blocklist_proxy | 25 × 0.70 | 17.5 | Sinalizado como proxy sem um listener SOCKS ou HTTP próprio, como um endereço de saída para o qual vimos um proxy aberto repassar o nosso tráfego de teste |
| proxy_observed_third_party | 25 × 0.70 | 17.5 | Está em uma lista de terceiros com endereços vistos retransmitindo tráfego no último dia |
| residential_proxy | 40 × 0.90 | 36 | Um proxy que nós mesmos sinalizamos em uma linha que os nossos dados consideram residencial ou móvel. Uma inferência aproximada, não detecção de proxy residencial |
| relay_ip | 10 × 0.85 | 8.5 | Uma saída de relay de privacidade como o iCloud Private Relay; também limita a pontuação a 60 |
O endereço se comportou mal? Estes vêm de três zonas de DNSBL e dos nossos feeds de abuso e de botnets.
| Valor de detection_methods | Pontos × confiança | Soma | O que significa |
|---|---|---|---|
| known_spammer | 40 × 0.90 | 36 | Listado em zen.spamhaus.org, b.barracudacentral.org ou bl.spamcop.net |
| abusive_listed | 30 × 0.80 | 24 | Listado nos nossos feeds de abuso, ou em pelo menos duas das três zonas de DNSBL |
| botnet_c2 | 50 × 0.95 | 47.5 | Um feed de botnets o lista como servidor de comando e controle |
| botnet_infected | 35 × 0.80 | 28 | Um feed de botnets o lista em qualquer outro papel, como uma máquina infectada |
É infraestrutura de servidores? Hospedagem significa um dos 853 ASNs de hospedagem curados, uma faixa dos 10 provedores de nuvem que carregamos ou uma faixa anycast. Só um dos três motivos datacenter_* pode disparar, do mais forte para o mais fraco.
| Valor de detection_methods | Pontos × confiança | Soma | O que significa |
|---|---|---|---|
| datacenter_with_vpn_proxy | 40 × 0.90 | 36 | Endereço de hospedagem com qualquer evidência de protocolo de VPN ou proxy acima, incluindo a marcação de WireGuard de uma lista |
| datacenter_blocklisted | 30 × 0.75 | 22.5 | Endereço de hospedagem que também está em uma lista de abuso, spam ou botnet |
| datacenter_ip | 20 × 0.50 | 10 | Endereço de hospedagem sem mais nada contra ele |
| no_ptr_datacenter | 10 × 0.50 | 5 | Endereço de hospedagem sem DNS reverso nos nossos registros armazenados, que têm lacunas |
| whois_vpn_keywords | 20 × 0.70 | 14 | O registro WHOIS ou RDAP tem palavras-chave de VPN, mas o endereço não está sinalizado como VPN |
| whois_hosting | 15 × 0.55 | 8.25 | O registro WHOIS ou RDAP tem palavras-chave de hospedagem, mas o endereço não está nas nossas listas de hospedagem |
O que o DNS reverso dele diz? Estes leem o hostname PTR armazenado com padrões simples, e é por isso que cada um tem peso leve.
| Valor de detection_methods | Pontos × confiança | Soma | O que significa |
|---|---|---|---|
| rdns_tor | 30 × 0.80 | 24 | O hostname parece de uma saída Tor |
| rdns_vpn | 20 × 0.75 | 15 | O hostname contém "vpn" ou o nome de uma marca de VPN |
| rdns_proxy | 20 × 0.70 | 14 | O hostname contém "proxy", "squid" ou "socks" |
| rdns_hosting | 10 × 0.60 | 6 | O hostname parece de um servidor ou host de nuvem |
| fcrdns_mismatch | 5 × 0.40 | 2 | O hostname não resolve de volta para o endereço |
| rdns_residential | -20 × 0.80 | -16 | O hostname parece de uma linha doméstica |
| rdns_mobile | -10 × 0.70 | -7 | O hostname parece de uma rede móvel |
Que tipo de linha é, e é um rastreador conhecido? Os motivos de tipo de rede são sempre um de um par: o desconto sem evidência de anonimizador ou a penalidade com ela.
| Valor de detection_methods | Pontos × confiança | Soma | O que significa |
|---|---|---|---|
| residential_isp | -20 × 0.85 | -17 | Linha residencial, inferida pelo DNS reverso, sem evidência de anonimizador |
| residential_with_threat | 25 × 0.85 | 21.25 | Linha residencial com evidência de proxy, Tor ou protocolo de VPN (uma marcação de IPsec sozinha não conta) |
| mobile_carrier | -15 × 0.80 | -12 | Linha móvel sem evidência de anonimizador |
| mobile_with_threat | 20 × 0.80 | 16 | Linha móvel com evidência de anonimizador |
| verified_crawler | -30 × 0.95 | -28.5 | Dentro de um arquivo oficial de faixas de IP de rastreadores, baixado novamente todos os dias |
Cinco motivos que o código conhece, mas nunca retorna
Cinco nomes existem no código de pontuação do GeoIPHub, mas não podem aparecer em uma resposta hoje, então não crie regras que esperem por eles:
spoofed_crawler(+42,75). Nada no nosso pipeline o define, e uma consulta só vê um IP, nunca um User-Agent. A comparação entre o nome de bot alegado ethreat.crawleracontece no seu código.honeypot_hit(+33,25). A contagem de honeypot é um placeholder que é sempre 0.known_vpn_asn(+22,5). O nosso código só rotula uma rede como VPN quando o endereço já é uma VPN, entãoknown_vpn_serversempre vence.rdns_cgnat(-10,5). O nosso classificador de hostnames não tem padrão de CGNAT.shadowsocks_suspected(+10). Não temos sondagem de Shadowsocks, e nenhuma lista de provedores que carregamos marca Shadowsocks.
O arquivo de configuração também guarda mais 11 pesos que o caminho de consulta nunca lê, então esses nomes também nunca chegam a uma resposta. Preferimos listar um motivo inativo a deixar você descobri-lo esperando.
Escreva regras com base nos motivos, não no número bruto
A razão prática para aprender esses nomes é que regras escritas com base nos motivos sobrevivem às nossas lacunas de dados, e regras escritas com base no total não. Os nossos limites de bloqueio para login, cadastro e checkout definem as faixas; dentro delas, algumas regras no nível dos motivos fazem a maior parte do trabalho:
- Trate tor_exit, socks5_open, http_proxy_open e botnet_c2 como fortes por si sós: cada um soma 33 ou mais e vem de uma lista ou da nossa própria sondagem.
- Não aja com base apenas em no_ptr_datacenter, fcrdns_mismatch ou em qualquer motivo rdns_*. Eles valem de 2 a 24 pontos e leem hostnames armazenados que podem estar faltando ou desatualizados.
- Leia verified_crawler junto com threat.crawler.verified e um operador que corresponda ao bot que o User-Agent alega, nunca threat.crawler.name. Um rastreador verificado em uma lista de spam, como o AhrefsBot em 29 de outubro de 2026, pertence à sua allowlist de rastreamento, não ao seu checkout.
- Trate wireguard_open como evidência de lista, não como resultado de sondagem. Significa que a lista publicada pelo provedor diz que o servidor roda WireGuard.
- Registre o array detection_methods completo em cada decisão. É a trilha de auditoria que um agente de suporte ou um revisor de chargeback vai pedir.
Veja como isso fica em código, usando apenas campos reais:
const { recommended_action, detection_methods: why } = data.scoring;
const strong = ["tor_exit", "socks5_open", "http_proxy_open", "botnet_c2"];
if (why.some((m) => strong.includes(m))) return block(why);
// isCrawlPath is your own route check, not an API field.
// claimMatchesOperator compares the bot your User-Agent names with
// threat.crawler.operator; /blog/verified-crawler-ip-list has a working version.
if (why.includes("verified_crawler") && isCrawlPath(req) &&
claimMatchesOperator(req, data.threat.crawler)) return allow(why);
if (recommended_action === "block") return block(why);
if (recommended_action === "step_up") return challenge(why);
return allow(why);
Os motivos também dizem de onde vem a evidência, o que importa quando um cliente a contesta. known_vpn_server com vpn_confidence 95 significa a própria lista do provedor; explicamos como nomeamos o provedor de VPN por trás de um IP e o que cada valor de confiança diz. Do lado das sondagens, como funciona a detecção de VPN e proxy mostra de onde vêm os motivos de anonimizador mais pesados, e a lista completa de campos de dados de IP documenta o restante da resposta.
Some uma pontuação você mesmo
Cole qualquer endereço no verificador gratuito de pontuação de fraude de IP do GeoIPHub, copie os motivos e reconstrua o número a partir das tabelas acima. Se a sua soma e a nossa pontuação discordarem, um de nós tem um bug, e gostaríamos de saber qual.
Para se aprofundar
Perguntas frequentes
O que scoring.detection_methods contém?
O nome de cada motivo que alterou a pontuação, na ordem em que o código de pontuação do GeoIPHub os verifica, não por tamanho. Cada nome tem pontos fixos e uma confiança na nossa configuração de pontuação, e a pontuação é a soma de pontos vezes confiança, arredondada e mantida entre 0 e 100. O código do GeoIPHub pode nomear 41 motivos; 36 podem aparecer em uma resposta hoje.
Por que um rastreador verificado ainda recebe uma pontuação de revisão?
Porque, na pontuação do GeoIPHub, verified_crawler é um peso, não uma allowlist. Ele subtrai 28,5 pontos (menos 30 com confiança de 0,95). O AhrefsBot em 5.39.1.230 também tinha uma listagem na Spamhaus em 29/10/2026, então os motivos de spam e de blocklist superaram o desconto: 35, review, abaixo dos 64 (step up) que teria sem a correspondência de rastreador.
Uma pontuação pode ficar abaixo de zero?
A soma ponderada pode, a pontuação não. O Googlebot em 66.249.66.1 somou menos 18,5 em 29/10/2026 (datacenter_ip mais verified_crawler) e a API do GeoIPHub retornou 0. O saldo negativo não é transferido como crédito para mais nada.
wireguard_open significa que o GeoIPHub completou um handshake de WireGuard?
Não. O GeoIPHub não tem sondagem de WireGuard. wireguard_open significa que a própria lista de servidores publicada pelo provedor de VPN marca aquele servidor como WireGuard. As nossas sondagens cobrem SOCKS5, SOCKS4, HTTP CONNECT, HTTP forward, OpenVPN, IKE (v1 e v2), PPTP e L2TP, então openvpn_open, pptp_open, l2tp_open, socks5_open e http_proxy_open são resultados de sondagem.
Por que vejo no_ptr_datacenter em um endereço que tem DNS reverso?
O motivo lê os registros de DNS reverso armazenados pelo GeoIPHub, não uma consulta ao vivo, e esses registros têm lacunas. Em 29/10/2026 ele disparou para o AhrefsBot 5.39.1.230 e para a saída Tor 185.220.101.1, enquanto dig -x resolveu os dois. Ele vale 5 pontos, então escreva regras com base nos motivos em que você confia, não na contagem bruta.
A equipe por trás da API do GeoIPHub
Escrito pela equipe do GeoIPHub, as pessoas que constroem a API de inteligência de IP do GeoIPHub e seu scanner. Os rascunhos são preparados com auxílio de IA e editados pela equipe; os exemplos de API são consultas reais à API em produção, salvo quando indicados como ilustrativos.


