Uma das soluções para "spam" é-um-freqüente actualizada base de dados com endereços IP que aparecem a portar-se mal. Essa base deve, preferencialmente, ser aleatória acessível em alta velocidade. DNS oferece uma solução para isso.

Introdução.


Felizmente internet tem encontrado respostas para o problema immens crescente spam. A solução é-um-freqüente actualizada base de dados com endereços IP que aparecem a portar-se mal. Essa base deve, preferencialmente, ser aleatória acessível em alta velocidade. DNS oferece uma solução para isso.

Entradas DNS pode ser atualizado rapidamente. Além disso, na sua maioria, não há necessidade de baixar uma cópia do (potencialmente grande) de dados com freqüência. Se um servidor de e-mail pode detectar, em uma fração de segundo, que o envio IP está actualmente a lista negra, por exemplo, porque foi infectado por um vírus e utilizado como retransmissor aberto, ele pode bloquear effictively recepção.

Uma bem conhecida é DNSBL provedor spamhouse.org. Para um (completa) DNSBL lista de provedores, olhaaqui


Usage


Ambos os servidores SMTP e clientes mail (correio eletrônico ou de limpeza) pode usar esse método. O caminho é uma mensagem de correio passou semper armazenada, para que você possa recuperar o semper originários IP. Esta é uma parte essencial do protocolo SMTP.

Usando o protocolo POP3, você pode ver uma caixa de correio, top (topo significa: buscar apenas o cabeçalho da mensagem) cabeçalhos das mensagens, e ver se eles estão olhando para a lista negra por "Recebido: de somehost (1.2.3.4)" linhas.

Uma vez que estas bases de spam pode ser atualizado com freqüência, eles podem efetivamente detectar uma grande quantidade (> 50%?) De spam.

Como funciona



Basicamente, o que você precisa fazer é verificar contra uma DNSBL DNS (bloqueios) fonte, como
www.spamhaus.org. Isso é feito da seguinte maneira:

Suponha que você queira verificar se o endereço IP 60.70.80.90 é um spammer, que você acabou de realizar uma consulta DNS para sbl.spamhaus.org, com o (invertida) ip endereço inserido, como
dns query: 90.80.70.60.sbl.spamhaus.org
Se você voltar um registro A, este é um spammer. Se você voltar nada, esse ip não está na lista de spam.

Testá-lo


Você pode facilmente verificar isso usando o 'ping' comando.
se você faria:
ping 90.80.70.60.sbl.spamhaus.org, então há duas opções:
* Te buscar "host desconhecido" mensagem. Este é ok, o IP não é negra.
* Você ganha'127 .0.0. X ', onde x> 1, como 127.0.0.2. X representa um código do status. Geralmente, é usado para 2 (semi) netblocks permanente, e 4 é utilizado para "proxies abertos" (como: máquinas infectadas por um vírus).


Exemplo


i utilizar esta unidade, com êxito, um cliente de e-mail.Lubos tem integrado com sucesso esta aparelho em um servidor SMTP/POP3 suite.

você pode usar o aparelho com ou sem sinapse TCP / IP biblioteca, fixando a sinapse) ($ DEFINE directiva.

spamchck.pas

unit spamchck;

interface

//Query's the spamhaus.org database of spammers

usa Classes, SysUtils, Sinapse) ($ ifdef SynaUtil, SynSock WinSock ($ ELSE)) ($ endif;

tipo
TSpamCheck = class (TObject)
protegida
público
FDNSBL: String; / / DNS blocklist
Crie construtor;
função IsSpammer (IP: String): Integer; sobrecarga;
função IsSpammer (MailHeader: TStrings): Integer; sobrecarga;
final;


execução

TSpamCheck ()

TSpamCheck.Create construtor;
começo
herdou;
FDNSBL: = 'SBL-xbl.spamhaus.org';
/ / Alternativamente uso sbl.spamhaus.org (spam) ou
/ / Xbl.spamhaus.org (aberto relés, proxys)
/ / Ou uma fonte alternativa DNSBL fonte.
/ / O SBL-XBL é a lista combinada.
final;

função TSpamCheck.IsSpammer (IP: String): Integer;
var RevIP: String;
i: Integer;
p: PHostEnt;
começo
/ / Consulta banco de dados
/ / Em primeiro lugar, inverter o PI
Resultado: = -1;
Synapse) ($ ifdef
se IsIP (PI), em seguida,
($ Endif)
começo
/ / Reverso do IP
RevIP: ='';
for i: = 0 para fazer 2
começo
RevIP: = '.' + Copy (IP, 1, pos ('.', IP) -1) + RevIP;
IP: = Copy (IP, pos ('.', PI) +1, maxint);
final;
RevIP: IP = + RevIP;

/ / Agora, consultar a base de dados:
RevIP: = RevIP + "." + FDNSBL;
p: = GetHostByName (PChar (RevIP));
se Assigned (p), em seguida,
começar / / Resultados voltaria como 127.0.0.x onde x> 1
/ / = 127.0.0.2 spam
/ / = 127.0.0.4 retransmissão aberta etc
Resultado: byte = (p ^. H_addr ^. S_un_b.s_b4);
fim
else / / dns entrada não encontrado, marcá-lo como seguro:
Resultado: = 0;
final;

final;

função TSpamCheck.IsSpammer (MailHeader: TStrings): Integer;
var v, ip: String;
i, r: Integer;
começo
/ / Parse um e-mail cabeçalho
/ / Look for 'recebidas' cabeçalho
/ / extrair o endereço IP, assumindo forma 'Received: a partir de (ABCD) pelo (wxyz)
/ / Validar este endereço IP em spamhaus.
i: = 0;
Resultado: = -1;
enquanto i <MailHeader.Count fazer
começo
se pos ( 'recebida:', minúsculas (MailHeader [i])) = 1, em seguida,
começo
v: = MailHeader [i];
/ / busca de cabeçalhos adicionais:
enquanto ((i +1) <MailHeader.Count) e
(MailHeader [i +1 e ]<>'')
(MailHeader [i +1] [1] = '') fazer
começo
inc (i);
v: v = + MailHeader [i];
final;
/ / v agora contém uma linha, encontrar com o endereço de IP:
v: = minúsculas (v);
/ / procurando:
/ / Recebidas: de somehost.com (1.2.3.4).
v: = cópia (v, pos ( 'de', v) +4, maxint);
v: = cópia (v, pos ('(', v) +1, maxint);
v: = cópia (v, 1, pos (')', v) -1);

se pos ('[', v)> 0, em seguida,
/ / formato também é válido:
/ / Recebidas: de somehost.com (somehost.com [1.2.3.4])
começo
v: = cópia (v, pos ('[', v) +1, maxint);
v: = cópia (v, 1, pos (']', v) -1);
final;

Resultado: = IsSpammer (v);

/ / recebeu uma única linha é suficiente
Se o resultado for> 0, em seguida,
break;
/ /
final;
inc (i);
final;
final;

fim.

Average rating: