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 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