Nylon Tecnologia
Mudamos para um dominio proprio.

Acesse nosso novo forum.

http://crawlersnetwork.com/

[Masm32/Delphi] Conexão winsock

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Masm32/Delphi] Conexão winsock

Mensagem por r00t_5tr1k3r em Sab Ago 25, 2012 11:27 pm

Hi
Sem muitas idéias do que desenvolver,segue um exemplo bastante simples de conexão via-winsock,o cliente e o servidor foram desenvolvidos respectivamente em Delphi e Masm32. =)

Código:

var
_tempstr: string;
_wsa:wsadata;
_socket:integer;
_sckt_addr_in:sockaddr_in;
begin
_tempstr := 'love you!!!!!!' + #13#10;
try
WSAStartup($101,_wsa); // iniciamos a utilização do winsock
_socket := socket(AF_INET,SOCK_STREAM,0); // criamos o socket
_sckt_addr_in.sin_family := AF_INET; // definimos a família
_sckt_addr_in.sin_port := htons(80); // definimos a porta
_sckt_addr_in.sin_addr.S_addr := inet_addr(pchar('127.0.0.1')); //definimos a quem iremos nos conectar
connect(_socket,_sckt_addr_in,sizeof(_sckt_addr_in)); // realizamos a tentativa de conexão
send(_socket,_tempstr[1],length(_tempstr),0); // enviamos os dados
closesocket(_socket); // termina a utilização do socket
wsacleanup(); // finalizamos o uso do winsock
except
end; 

Código:

.386 ; código de 32 bits
.model flat,stdcall ; modelo de memória
option casemap:none ; case sensitive


; prototipos
include \masm32\include\kernel32.inc 
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\wsock32.inc


; bibliotecas
includelib \masm32\lib\kernel32.lib ; exitprocess
includelib \masm32\lib\user32.lib ; messagbox
includelib \masm32\lib\wsock32.lib ; bind,accept,htons,etc..


; variáveis não definidas
.data?
_wsa WSADATA <>        ; estrutura que contém informações para utilizar o winsock
_socket_conexao DWORD 0 ; socket que manipulará a conexão ao cliente
_socket_recv DWORD 0    ; socket que manipulará o recebimento de dados
_addr_in sockaddr_in <> ; estrutura que contém as informações necessária para a conexão


.data
_wsaerro db "Erro ao iniciar a utilização do winsock",0
_sckt_erro db "Erro ao criar socket de conexão",0
_bind_erro db "Erro ao configurar o socket",0
_listen_erro db "Erro ao iniciar a escuta",0
_accept_erro db "Erro ao aceitar a conexão",0
_titulo_recv db "Dados recebidos",0
_buffer db 1024 dup (0)


.code
finalizar: ; para finalização do programa
push 0
call [ExitProcess]


wsaerro:
push 10h
push offset _wsaerro
push offset _wsaerro
push 0
jmp finalizar
sckterro:
push 10h
push offset _sckt_erro
push offset _sckt_erro
push 0
jmp finalizar
binderro:
push 10h
push offset _bind_erro
push offset _bind_erro
push 0
jmp finalizar
listenerro:
push 10h
push offset _listen_erro
push offset _listen_erro
push 0
jmp finalizar
accepterro:
push 10h
push offset _accept_erro
push offset _accept_erro
push 0
jmp finalizar
entrada:
push offset _wsa
push 101h
call [WSAStartup]
cmp eax,-1
je wsaerro


push 0          ; protocolo
push SOCK_STREAM ; tipo
push AF_INET    ; família
call [socket]    ; criamos o socket
cmp eax,-1
je sckterro
mov _socket_conexao,eax        ; "jogamos" o resultado da função "socket" na variável _socket_conexão
mov _addr_in.sin_family,AF_INET ; família
push 80                        ; porta
call [htons]                    ; "trazuzimos" a porta para "network-byte"
mov _addr_in.sin_port,ax        ; setamos a porta de conexão
push sizeof _addr_in ; tamanho da estrutura
push offset _addr_in ; ponteiro da estrutura que contém as informações de conexão
push _socket_conexao ; socket
call [bind]
cmp eax,-1
je binderro
push 1 ; número de conexões que será aceita
push _socket_conexao ; especificamos o socket para listar
call
[listen]




cmp eax,-1
je listenerro
push 0
push 0
push _socket_conexao ; especificamos o socket de escuta
call [accept] ; aceitamos a conexão


cmp eax,-1
je accepterro
mov _socket_recv,eax
push 0 ; bandeira
push 1024 ; tamanho da buffer
push offset _buffer ; buffer que armazenará os dados recebidos
push _socket_recv  ; socket da conexão
call [recv]        ; recebemos os dados
push 40h
push offset _titulo_recv
push offset _buffer ; mostramos o que foi recebido
push 0
call [MessageBox]


push _socket_conexao
call [closesocket] ; terminamos a utilização do socket


push _socket_recv
call [closesocket] ; terminamos a utilização do socket
call [WSACleanup]


jmp finalizar
end entrada 

Espero que tenha ajudado alguém =DD

bye
avatar
r00t_5tr1k3r
Membro

Mensagens : 7
Pontos : 3898
Reputação : 10
Data de inscrição : 12/08/2012
Idade : 23
Localização : #!/usr/bin/perl

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum