All pastes #262058 Raw Edit

Mx

public text v1 · immutable
#262058 ·published 2006-11-30 03:15 UTC
rendered paste body
Socks4Connect proto :DWORD,:DWORD,:DWORD,:DWORD
SOCKS4c struct
svers BYTE ? ;socks version 4/5
command BYTE ?
wPort   WORD ?
dIp     DWORD ?
SOCKS4c ends

     CTEXT MACRO text:VARARG
            local TxtName
              .data
               TxtName BYTE text,0
              .code
            EXITM <ADDR TxtName>
     ENDM


;1)returns valid socket socket handle on success and -1 on error
;2)sockserv can be a host or ip
;3)example invoke Socks4Connect,CTEXT("200.219.166.196"),3128,CTEXT("microsoft.com"),80  ;<-highly anonymous proxy in brazil! :)

Socks4Connect proc sockserv:DWORD,socksport:DWORD,ohost:DWORD,oport:DWORD
LOCAL SockC:SOCKS4c
LOCAL SA:sockaddr_in
LOCAL xhand:DWORD

mov SockC.svers,4
mov SockC.command,1
invoke htons,oport
mov SockC.wPort,ax
invoke inet_addr,ohost
.if eax==INADDR_NONE
invoke gethostbyname,ohost 
cmp eax,NULL
je xerror             
mov eax,[eax+12]               
mov eax,[eax]                       
mov eax,[eax]                       
mov SockC.dIp,eax
.else
mov SockC.dIp,eax
.endif       
mov SockC.dIp,eax
invoke socket,AF_INET,SOCK_STREAM,0
cmp eax,INVALID_SOCKET
je

mov xhand,eax
mov SA.sin_family, AF_INET
invoke htons,socksport                 
mov SA.sin_port,ax 

invoke inet_addr,sockserv
.if eax==INADDR_NONE
invoke gethostbyname,sockserv 
cmp eax,NULL
je xerror
             
mov eax,[eax+12]               
mov eax,[eax]                       
mov eax,[eax]                       
mov SA.sin_addr,eax
.else
mov SA.sin_addr,eax
.endif

invoke connect,xhand,addr SAm,sizeof SAm
.if eax==SOCKET_ERROR                                                                             
    .if (eax!=WSAEWOULDBLOCK)
jmp xerror
    .endif
.endif
invoke send,xhand,addr SockC,sizeof SockC, 0   
mov eax,xhand
ret
xerror:
mov eax,-1
ret
Socks4Connect  endp