PixyPortManagerA port manager
File Name : pixyportmanager.hta Requirement : WSH 5.1, IE 5 with VML, WMI, Winsock registred (Visual Studio Installed for example) Author : Jean-Luc Antoine Submitted : 28/08/2001 Updated : 19/04/2002 Category : HTA Remember : The file extension has to be *.HTA Preview : Click here ! <html xmlns:v="urn:schemas-microsoft-com:vml" XMLNS:t="urn:schemas-microsoft-com:time"> <head> <HTA:APPLICATION APPLICATIONNAME="PixyPortManager" BORDER="thick" | "dialog" | "none" | "thin" BORDERSTYLE="normal" | "complex" | "raised" | "static" | "sunken" CAPTION="yes" CONTEXTMENU="yes" ID="oHTA" alert(oHTA.applicationName); INNERBORDER="yes" MAXIMIZEBUTTON="yes" MINIMIZEBUTTON="yes" NAVIGABLE="no" SCROLL="no" SCROLLFLAT="no" SELECTION="yes" SHOWINTASKBAR="yes" SINGLEINSTANCE="no" SYSMENU="yes" VERSION="0.5" WINDOWSTATE="normal" | "maximize" | "minimize"> <script language=vbscript> 'Notice : All was developed by JLA using Notepad ! Try it yourself, this is the best editor ;=) 'If you don't have a registered version of Winsock, you can find one here : http://planetsourcecode.com/xq/ASP/txtCodeId.4860/lngWId.1/qx/vb/scripts/ShowCode.htm Option Explicit Const HexaSize=1000 'Number of characters to dump Dim hWndHexa,HexaToDisplay 'Handle of the Hexa editor, buffer for data to display in hexa Const SckMax=11 'Option Base 0 Const DefaultFTPVDir="c:\temp" Const DefaultHTTPVDir="e:\quake3\extras\help" Const DefaultHTTPPage="index.htm" Dim i 'for temporary loop and counter Dim ActiveSck 'The sock beeing actually displayed ActiveSck=0 Dim BenchClient2Proxy,BenchNet2Proxy,BenchNbConnect BenchClient2Proxy=0:BenchNet2Proxy=0:BenchNbConnect=0 'Defind which kind of connection Const msckClient=1 Const msckServer=2 'Protocols that this prog can deal with Const psckEcho=7 'TCP/UDP : send all data received Const psckDiscard=9 'TCP/UDP : listen, accept connexion, close them if they close, that's all Const psckFTP=21 'TCP Const psckWhois=43 'TCP Const pSckHTTP=80 'TCP Const psckNNTP=119 'TCP const psckProxy=-1 'Act as a TCP Proxy Server const psckFtpData=-2 ' Protocols Const sckTCPProtocol=0 Const sckUDPProtocol=1 ' State Const sckClosed=0 const sckOpen=1 Const sckListening=2 Const sckConnectionPending=3 Const sckResolvingHost=4 Const sckHostResolved=5 Const sckConnecting=6 Const sckConnected=7 Const sckClosing=8 Const sckError=9 ' Errors Const sckInvalidPropertyValue=380 Const sckGetNotSupported=394 Const sckSetNotSupported=383 Const sckOutOfMemory=7 Const sckBadState=40006 Const sckInvalidArg=40014 Const sckSuccess=40017 Const sckUnsupported=40018 Const sckInvalidOp=40020 Const sckOutOfRange=40021 Const sckWrongProtocol=40026 Const sckOpCanceled=10004 Const sckInvalidArgument=10014 Const sckWouldBlock=10035 Const sckInProgress=10036 Const sckAlreadyComplete=10037 Const sckNotSocket=10038 Const sckMsgTooBig=10040 Const sckPortNotSupported=10043 Const sckAddressInUse=10048 Const sckAddressNotAvailable=10049 Const sckNetworkSubsystemFailed=10050 Const sckNetworkUnreachable=10051 Const sckNetReset=10052 Const sckConnectAborted=10053 Const sckConnectionReset=10054 Const sckNoBufferSpace=10055 Const sckAlreadyConnected=10056 Const sckNotConnected=10057 Const sckSocketShutdown=10058 Const sckTimedout=10060 Const sckConnectionRefused=10061 Const sckNotInitialized=10093 Const sckHostNotFound=11001 Const sckHostNotFoundTryAgain=11002 Const sckNonRecoverableError=11003 Const sckNoData=11004 Class MyProperties 'A way to define a structure Public Proto 'The protocole used during the connexion 'Values : psckEcho, psckDiscard, .... Public ProxySocket 'Parent/Child chained socket (number) Public Data 'Data that will be sent to Internet by the client socket Public Mode 'msckClient or msckServer Public User 'The remote user connected to the local server Public Password 'His password Public Allowed 'False if not logged in Public ftpType 'I for binary or A for Ascii Public ftpRoot 'Root of the virtual directory Public ftpCurDir 'Current directory Public ftpDataSocket 'Passive DTP Public ScanForVirus 'If we want to check for incoming virii Private Sub Class_Initialize ScanForVirus=True Proto=psckDiscard End Sub End Class Dim sckProp() ReDim sckProp(SckMax) For i=0 to SckMax Set sckProp(i)=New MyProperties sckProp(i).ftpRoot=DefaultFTPVDir sckProp(i).ftpCurDir=DefaultFTPVDir Next </script> <SCRIPT Language="VBScript" FOR="window" Event="onUnLoad"> 'Close All persisting connections For i=0 To SckMax ExecuteGlobal "If Not oSck" & i & ".State=sckClosed Then oSck" & i & ".Close" 'Do Until eval("oSck" & i & ".State") = sckClosed ' DoEvents 'Loop Next </SCRIPT> <SCRIPT Language="VBScript" FOR="window" Event="onLoad"> document.title="PixyPortManager running on " & oSck0.LocalIP & "-" & oSck0.LocalHostName & " (c) 2001 Jean-Luc Antoine" DisplayState </SCRIPT> <SCRIPT Language="VBScript" FOR="window" Event="onResize"> '' mettre en position absolute puis utiliser style.left 'datareceived.style.width=document.body.clientwidth - datareceived.getBoundingClientRect().left '' document.title=document.body.clientwidth & "-" & datareceived.style.posleft & "-" & datareceived.clientleft & "-" & datareceived.offsetleft & "-" & datareceived.scrollleft & "-" & datareceived.style.borderleft & "-" & datareceived.style.left & "-" & datareceived.style.pixelleft & "-" & datareceived.getBoundingClientRect().left ''DataReceived.style.setExpression("posLeft","document.body.clientLeft + 10"); </SCRIPT> <script language="vbscript"> Sub ChangeIP 'Sometimes the IP has to be explicitely determined 'If needed, bind the connexion to another adapter If eval("oSck" & ActiveSck & ".LocalIP")<>LocalBind.Value Then MyLog "Changing IP to " & LocalBind.Value ExecuteGlobal "oSck" & ActiveSck & ".Bind 10,LocalBind.Value" ExecuteGlobal "oSck" & ActiveSck & ".Close" End If 'If you never change the selectbox value, this sub is never executed End Sub Sub btnConnect MyLog ActiveSck & " - Connexion request on " & RemoteHost.value ChangeIP SckProp(ActiveSck).Proto=CInt(Proto.Value) SckProp(ActiveSck).Mode=msckClient ExecuteGlobal "oSck" & ActiveSck & ".Protocol=" & Protocole.Value Select Case Protocole.Value Case "" & sckUDPProtocol ExecuteGlobal "oSck" & ActiveSck & ".LocalPort=" & LocalPort.Value ExecuteGlobal "oSck" & ActiveSck & ".RemoteHost=""" & RemoteHost.value & """" ExecuteGlobal "oSck" & ActiveSck & ".RemotePort=" & RemotePort.Value ExecuteGlobal "oSck" & ActiveSck & ".Bind " & LocalPort.Value Case Else ExecuteGlobal "oSck" & ActiveSck & ".LocalPort=0" ExecuteGlobal "oSck" & ActiveSck & ".Connect RemoteHost.value, RemotePort.Value" End Select Dim strTemp strTemp=DataToSend.Value Select Case SckProp(ActiveSck).Proto Case psckWhois 'Whois (whois.networksolutions.com) strTemp="microsoft.com" & vbCrLf Case pSckHTTP 'HTTP - Web Browsing strTemp="GET / HTTP/1.1" & vbCrLf & "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*" & vbCrLf strTemp=strTemp & "Accept-Language: fr" & vbCrLf & "Accept-Encoding: gzip, deflate" & vbCrLF & "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; Pixy Client)" & vbCrLf strTemp=strTemp & "Host: " & RemoteHost.Value & vbCrLF & "Connection: Keep-Alive" & vbCrLf & vbCrLf Case psckNNTP 'NNTP - News Groups strTemp="help" & vbCrLf Case Else End Select DataToSend.Value=strTemp DisplayState End Sub Sub btnOption 'Get/update some specific params Dim Chaine Chaine="" Select Case CInt(Proto.Value) Case psckFTP Chaine="Virtual root directory :<input type=text name=RootDir Value=""" & SckProp(ActiveSck).ftpRoot & """" Chaine=Chaine & "onchange=""vbscript:Upd"">" Chaine=Chaine & "<scr" & "ipt language=""vbscript"">Sub Upd:Window.ReturnValue=window.dialogArguments & ""ftpRoot="" & chr(34) & RootDir.Value & chr(34) & """":End Sub:upd</scr" & "ipt>" Case psckHTTP Chaine="<input type=checkbox name=SFV " If SckProp(ActiveSck).ScanForVirus Then Chaine=Chaine & "CHECKED " Chaine=Chaine & "onclick=""vbscript:Upd"">Scan For Virus" Chaine=Chaine & "<scr" & "ipt language=""vbscript"">Sub Upd:Window.ReturnValue=window.dialogArguments & ""ScanForVirus=cbool("" & chr(34) & SFV.checked & chr(34) & "")"":End Sub:Upd</scr" & "ipt>" Case Else MsgBox "No option available for this kind of connection." End Select If Chaine<>"" Then Dim strResult strResult=window.showModalDialog("about:" & Chaine & "<p><center><Input type=button value=Close onclick='vbscript:window.close'></center>","SckProp(" & ActiveSck & ").","dialogHeight:300px; dialogWidth:400px; dialogTop:; dialogLeft:; edge:Raised; center:Yes; help:No; resizable:Yes; status:No;") 'msgbox strResult & vbCrLF & SckProp(ActiveSck).ScanForVirus ExecuteGlobal strResult 'msgbox strResult & vbCrLF & SckProp(ActiveSck).ScanForVirus End If End Sub Sub btnListen ChangeIP SckProp(ActiveSck).Proto=CInt(Proto.Value) SckProp(ActiveSck).Mode=msckServer ExecuteGlobal "oSck" & ActiveSck & ".Protocol=" & Protocole.Value ExecuteGlobal "oSck" & ActiveSck & ".LocalPort=" & LocalPort.Value Select Case Protocole.Value Case "" & sckUDPProtocol ExecuteGlobal "oSck" & ActiveSck & ".RemoteHost=""" & RemoteHost.value & """" ExecuteGlobal "oSck" & ActiveSck & ".RemotePort=" & RemotePort.Value ExecuteGlobal "oSck" & ActiveSck & ".Bind " & LocalPort.Value Case Else ExecuteGlobal "oSck" & ActiveSck & ".Listen" End Select MyLog ActiveSck & " - Begin listening on " & LocalPort.value DisplayState End Sub Sub BtnDisconnect ExecuteGlobal "oSck" & ActiveSck & ".Close" MyLog ActiveSck & " - Disconnexion request" DisplayState End Sub Sub SendData MyLog ActiveSck & " - Sending " & Len(DataToSend.Value) & " bytes" ExecuteGlobal "oSck" & ActiveSck & ".senddata DataToSend.Value" End Sub Sub DisplayHexa(bForce) 'Pops up a modeless window and displays in hexa the data received 'If the window is closed and bForce=False then we do nothing Dim Contenu,k,n,r,i Dim HaveToOpen '### berk ! find another way for these 5 lines ! Use OnUnload for the hexawindow On error resume next err.number=0 hWndHexa.document.body.innerhtml="Calculating, please wait" HaveToOpen=(err.number<>0) On Error Goto 0 If bForce Or (Not HaveToOpen) Then Contenu="<font size=2 face=""Verdana, Arial, Helvetica, sans-serif""><pre>Hexa Dump<input type=button style=""font-size:9""onclick='javascript:window.clipboardData.setData(""Text"", document.body.innerText);' Value='Copy To Clipboard'>" & vbCrLf & " 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F" & vbCrLf For n=1 to Len(HexaToDisplay) If ((n-1) Mod 16) = 0 Then s=Right("00000" & Hex(n),6) r=" " End If k=Asc(Mid(HexaToDisplay,n,1)) If k>31 And k<128 Then Select Case k Case 60 '< r=r & "<" Case 62 '> r=r & ">" Case Else r=r & Chr(k) End Select Else If k>127 Then r=r & "<span title=""" & chr(k) & """>.</span>" Else r=r & "." End If s=s & " <span title=" & k & ">" & Right("0" & Hex(k),2) & "</span>" If ((n Mod 16)=0) or (n=Len(HexaToDisplay)) Then contenu=contenu & s for i=1 to ((n Mod 16)>0)*((n Mod 16)*3-48) contenu=contenu & " " next contenu=contenu & r & vbCrLf End If Next If HaveToOpen Then set hWndHexa=window.showModelessDialog("about:blank","Dialog Arguments Value","dialogHeight: 300px; dialogWidth: 460px; dialogTop: 200px; dialogLeft: 200px; edge: Raised; center: Yes; help: No; resizable: Yes; status: No;") while hWndHexa.document.ReadyState<>"complete" wend End If hWndHexa.document.body.innerhtml=Contenu & "</pre></font>" End If End Sub Function ReduceLine(Chaine,NbLine) 'Reduce the log to NbLine lines Dim x,a,i a = Split(chaine,vbCrLf) x=UBound(a)-NbLine-1 if x<0 Then x=0 chaine="" For i = x to UBound(a) chaine=chaine & vbCrLf & a(i) Next ReduceLine=Mid(Chaine,3) 'begins with vbCrLf End Function Sub MyLog(Chaine) TheLog.InnerHTML=ReduceLine(TheLog.InnerHTML & "<br>" & Now & " " & Chaine,70) End Sub Sub DisplaySck(Num,State) ExecuteGlobal "btns" & Num & ".fillcolor=Array(""#483d8b"",""#A0FFA0"",""#00FF00"",""#FF9900"",""#99FF00"",""#A0A0FF"",""#99FF00"",""#BBFFBB"",""#0000FF"",""#FF0000"")(" & State & ")" End Sub Sub DisplayState Dim i ActiveSck=SckList.Value LocalBind.Value=Eval("oSck" & ActiveSck & ".LocalIP") RemoteHost.Value=Eval("oSck" & ActiveSck & ".RemoteHost") RemoteHostIP.Innertext=Eval("oSck" & ActiveSck & ".RemoteHostIP") RemotePort.Value=Eval("oSck" & ActiveSck & ".RemotePort") LocalPort.Value=Eval("oSck" & ActiveSck & ".LocalPort") Proto.Value=SckProp(ActiveSck).Proto Protocole.Value=Eval("oSck" & ActiveSck & ".Protocol") i=eval("oSck" & ActiveSck & ".State") BtnCon.Disabled=Not(i=SckClosed) BtnListening.Disabled=Not(i=SckClosed) BtnDiscon.Disabled=(i=SckClosed) btnSendData.disabled=(i<>SckConnected) AND (i<>SckOpen) MyState.Value=Array("Closed","Open","Listening","Connection Pending","Resolving Host","Host Resolved","Connecting","Connected","Closing","Error")(i) DisplaySck ActiveSck ,i End Sub Function GetAvailSck Dim x x=SckMax While (x>-1) And (Eval("oSck" & x & ".State")<>sckClosed) x=x-1 Wend GetAvailSck=x End Function Function RegExpTest(patrn, strng) Dim regEx, Match, Matches ' Create variable. RegExpTest=False Set regEx=New RegExp ' Create a regular expression. regEx.Pattern=patrn ' Set pattern. regEx.IgnoreCase=False ' Set case insensitivity. regEx.Global=True ' Set global applicability. Set Matches=regEx.Execute(strng) ' Execute search. For Each Match in Matches ' Iterate Matches collection. RegExpTest = True Next Set regEx=Nothing End Function ''''''''''''''''' ' Socket events ' ''''''''''''''''' Sub evtConnect(ByRef oSck,iSck) 'When we connect as a client to a remote host MyLog iSck & " - Connected to " & oSck.RemoteHost & ":" & oSck.RemotePort & " from local port " & oSck.LocalPort If SckProp(iSck).Proto=psckProxy Then 'The client socket has to send data 'MyLog iSck & " - Proxy Client socket sending data to " & oSck.RemoteHost oSck.SendData SckProp(iSck).Data End If If iSck<>ActiveSck Then DisplaySck iSck,oSck.State Else DisplayState End If End Sub Sub evtClose(ByRef oSck,iSck) 'If the remote host closes the connexion If sckProp(iSck).Proto=psckProxy Then If sckProp(iSck).Mode=msckServer Then 'Close the Client If eval("oSck" & sckProp(iSck).ProxySocket & ".state")<>sckClosed Then MyLog "Closing proxy client socket " & sckProp(iSck).ProxySocket ExecuteGlobal "oSck" & sckProp(iSck).ProxySocket & ".close" End If End If End If oSck.Close MyLog iSck & " - Disconnected" If iSck<>ActiveSck Then DisplaySck iSck,oSck.State Else DisplayState End If End Sub Sub evtDataArrival(ByRef oSck,iSck,bytesTotal) ' bytesTotal:long dim chaine,i,strTemp,V Chaine="" oSck.GetData chaine ',,bytesTotal If Beep.Checked Then oBeep.getToolkit.beep Select Case SckProp(iSck).Proto Case psckHTTP If SckProp(iSck).ScanForVirus Then 'Search for Nimda If right(Chaine,44)=" HTTP/1.0" & vbCrLF & "Host: www" & vbCrLF & "Connnection: close" & vbCrLf & vbCrLf Then strTemp=Left(Chaine,Len(Chaine)-44) If Left(strTemp,5)="GET /" Then strTemp=Mid(strTemp,6) Dim IP IP=oSck.RemoteHostIP v=RegExpTest("(c|d|MSADC|scripts(/..%(252f|255c|%35c|c1%9c|c0%2f|c1%1c|c0%af|%35%63|25%35%63)..)?)/(Admin.dll|(winnt/system32/cmd|root).exe\?/c\+dir)",strTemp) If Not v Then v=RegExpTest("(_vti_bin|_mem_bin|msadc)(/..%255c../..%255c../..%255c.*)+(/..%c1%1c../..%c1%1c../..%c1%1c..)?/(Admin.dll|winnt/system32/cmd.exe\?/c\+(dir|tftp%20-i%20" & IP & "%20GET%20Admin.dll%20(c|d|e):\Admin.dll))",strTemp) End If If Not v Then 'Test tftp v=RegExpTest("((MSADC|scripts)/root|(c|d|scripts/..%(252f|255c|c1%9c|c0%af|c0%2f|%35c|%35%63|c1%1c|25%35%63)..)/winnt/system32/cmd).exe\?/c\+tftp%20-i%20" & IP & "%+20GET%20Admin.dll%20((c|d|e):\)?Admin.dll",strTemp) End If If v Then MyLog iSck & " - Nimda received ! ignoring..." Chaine="" oSck.Close End If End If End If End If Case Else 'Other protocols End Select If Chaine<>"" Then MyLog iSck & " - " & oSck.RemoteHostIP & ":" & oSck.RemotePort & " Data Arrival - " & bytesTotal & " bytes on port " & oSck.LocalPort HexaToDisplay=Right(HexaToDisplay & Chaine,HexaSize) DisplayHexa False If RealTimeLog.Checked Then DataReceived.InnerText=ReduceLine(DataReceived.InnerText & Chaine,70) If SckProp(iSck).Mode=msckServer Then Select Case SckProp(iSck).Proto Case psckEcho oSck.SendData Chaine Case psckDiscard Case psckFTP 'http://www.faqs.org/rfcs/rfc959.html 'http://www.w3.org/Protocols/rfc959/4_FileTransfer.html 'delete vbCrLf If Right(Chaine,2)=vbCrLf Then Chaine=Left(Chaine,Len(Chaine)-2) i=Instr(Chaine," ") If i>1 Then 'Commands with parameters Select Case UCase(Left(Chaine,i-1)) Case "USER" 'USER 123vbcrlf ou USER (none)vbcrlf SckProp(iSck).User=Mid(Chaine,i+1) MyLog iSck & " User " & SckProp(iSck).User & " trying to enter" If UCase(SckProp(iSck).User)="ANONYMOUS" Then oSck.SendData "331 Anonymous access allowed, send identity (e-mail name) as password." & vbCrLf Else oSck.SendData "331 Password required for " & SckProp(iSck).User & "." & vbCrLf End If SckProp(iSck).Allowed=False Case "PASS" 'PASS vbcrlf ou PASS 1234vbCRLF SckProp(iSck).Password=Mid(Chaine,i+1) V=False Select Case SckProp(iSck).User Case "anonymous" V=True Case "test" If SckProp(iSck).Password="ok" Then V=True End Select If V Then 'If Login/password is ok MyLog iSck & " User " & SckProp(iSck).User & " logged in." oSck.SendData "230-This is " & oSck0.LocalHostName &_ " Please see the dirmap.txt" & vbCrLf &_ "230-file for more information." & vbCrLf &_ "230 Anonymous user logged in." & vbCrLf SckProp(iSck).Allowed=True Else MyLog iSck & " User " & SckProp(iSck).User & " : access denied." oSck.SendData "530 User " & SckProp(iSck).User & " cannot log in." & vbCrLf End If Case "PORT" 'PORT 127,0,0,1,4,99 IP1,IP2,IP3,IP4,RND*126+1,RND*255+1 'MSB and LSB, octets de poids fort et faible 'issued from a "send" strTemp=Replace(Mid(Chaine,i+1),",",".") i=InstrRev(strTemp,".",InstrRev(strTemp,".")-1) V=Mid(strTemp,i+1) strTemp=Left(strtemp,i-1) i=Instr(V,".") i=CInt(Left(V,i-1))*256+CInt(Mid(V,i+1)) SckProp(iSck).ftpDataSocket=GetAvailSck SckProp(SckProp(iSck).ftpDataSocket).ftpDataSocket=iSck SckProp(SckProp(iSck).ftpDataSocket).Proto=psckFtpData ExecuteGlobal "oSck" & SckProp(iSck).ftpDataSocket & ".LocalPort=0" ExecuteGlobal "oSck" & SckProp(iSck).ftpDataSocket & ".Connect """ & Left(strtemp,i-1) & """," & i oSck.SendData "200 PORT command successful." & vbCrLF 'Case "STOR" 'issued from a "send" 'Case "XRMD" 'issued from a "rmdir" 'Case "RNFR" '"rename" source, dest Case "CWD" 'CWD / strTemp=Replace(Mid(Chaine,i+1),"/","\") If Left(strTemp,1)="\" Then 'from root SckProp(iSck).ftpCurDir=SckProp(iSck).ftpRoot If Right(SckProp(iSck).ftpCurDir,1)="\" Then SckProp(iSck).ftpCurDir=Left(SckProp(iSck).ftpCurDir,Len(SckProp(iSck).ftpCurDir)-1) SckProp(iSck).ftpCurDir=SckProp(iSck).ftpCurDir & strTemp Else 'relative If Right(SckProp(iSck).ftpCurDir,1)<>"\" Then SckProp(iSck).ftpCurDir=SckProp(iSck).ftpCurDir & "\" SckProp(iSck).ftpCurDir=SckProp(iSck).ftpCurDir & strTemp End If '### s'assurer que le chemin r�duit (hors ..) correspond au root MyLog "New current directory : " & SckProp(iSck).ftpCurDir oSck.SendData "250 CWD command successful." & vbCrLf Case "SITE" 'site help If UCase(Mid(Chaine,i+1))="HELP" Then oSck.SendData "214-The following SITE commands are recognized(* ==>'s unimplemented)." & vbCrLf &_ " CKM" & vbCrLf & " DIRSTYLE" & vbCrLf & " HELP" & vbCrLf & " STATS" & vbCrLf &_ "214 HELP command successful." & vbCrLf Else oSck.SendData "500 '" & Mid(Chaine,i+1) & "': command not understood" & vbCrLf End If Case "TYPE" 'TYPE A for ascii - TYPE I for binary SckProp(iSck).ftpType=Mid(Chaine,6) oSck.SendData "200 Type set to " & SckProp(iSck).ftpType & "." & vbCrLf 'Case "OPTS" 'opts utf8 on Case "HELP" strTemp="ACCT (specify account)|ALLO (allocate storage vacuously)|" &_ "APPE <sp> file-name|CDUP change to parent directory|" &_ "CWD [ <sp> directory-name ]|DELE <sp> file-name|HELP [ <sp> <string>]|" &_ "LIST [ <sp> path-name]|MDTM (sp) file-name|MKD <sp> path-name|" &_ "MODE (specify transfer mode)|NLST [ <sp> path-name ]|NOOP|" &_ "PASS <sp> password|PASV (set server in passive mode)|" &_ "PORT <sp> b0,b1,b2,b3,b4,b5|PWD (return current directory)|" &_ "QUIT (terminate service)|REIN (reinitialize server state)|" &_ "REST <sp> marker|RETR <sp> file-name|RMD <sp> path-name|" &_ "RNFR <sp> file-name|RNTO <sp> file-name|SITE (site-specific commands)|" &_ "SIZE (sp) file-name|SMNT <sp> pathname|STAT (get server status)|" &_ "STOR <sp> file-name|STOU (store unique file)|STRU (specify file structure)|" &_ "SYST (get operating system type)|TYPE <sp> [ A | E | I | L ]|" &_ "USER <sp> username|XCUP change to parent directory|" &_ "XCWD [ <sp> directory-name ]|XMKD <sp> path-name|" &_ "XPWD (return current directory)|XRMD <sp> path-name|" i=Instr(strTemp,UCase(Mid(Chaine,6))) If i>0 Then oSck.SendData "214 Syntax: " & Mid(strTemp,i,Instr(Mid(strTemp,i),"|")-1) & vbCrLf Else oSck.SendData "501 Unknown command " & Mid(Chaine,6) & "." & vbCrLf End If 'Case "ABOR" Case Else oSck.SendData "500 '" & Chaine & "': command not understood" & vbCrLf End Select Else Select Case UCase(Chaine) Case "LIST" 'Dir oSck.SendData "150 Opening ASCII mode data connection for /bin/ls." & vbCrLf SckProp(iSck).Data="dr-xr-xr-x 1 owner group 0 Feb 13 20:02 bussys" & vbCrLf &_ "-r-xr-xr-x 1 owner group 0 Nov 27 2000 dirmap.htm" & vbCrLf &_ "dr-xr-xr-x 1 owner group 0 Feb 25 2000 kbhelp" & vbCrLf oSck.SendData "226 Transfer complete." & vbCrLf ExecuteGlobal "oSck" & SckProp(iSck).ftpDataSocket & ".SendData SckProp(" & iSck & ").Data" '421 Timeout (180 seconds): closing control connection. '421 Terminating connection. Case "HELP" '"remotehelp" oSck.SendData "214-The following commands are recognized(* ==>'s unimplemented)." & vbCrLF &_ " ABOR" & vbCrLf & " ACCT" & vbCrLf & " ALLO" & vbCrLf &_ " APPE" & vbCrLf & " CDUP" & vbCrLf & " CWD" & vbCrLf &_ " DELE" & vbCrLf & " HELP" & vbCrLf & " LIST" & vbCrLF &_ " MDTM" & vbCrLF & " MKD" & vbCrLF & " MODE" & vbCrLf &_ " NLST" & vbCrLf & " NOOP" & vbCrLf & " PASS" & vbCrLF &_ " PASV" & vbCrLF & " PORT" & vbCrLF & " PWD" & vbCrLF &_ " QUIT" & vbCrLf & " REIN" & vbCrLF & " REST" & vbCrLF &_ " RETR" & vbCrLF & " RMD" & vbCrLF & " RNFR" & vbCrLF &_ " RNTO" & vbCrLf & " SITE" & vbCrLF & " SIZE" & vbCrLF &_ " SMNT" & vbCrLf & " STAT" & vbCrLF & " STOR" & vbCrLf &_ " STOU" & vbCrLF & " STRU" & vbCrLf & " SYST" & vbCrLF &_ " TYPE" & vbCrLf & " USER" & vbCrLf & " XCUP" & vbCrLF &_ " XCWD" & vbCrLf & " XMKD" & vbCrLF & " XPWD" & vbCrLf &_ " XRMD" & vbCrLf & "214 HELP command successful." & vbCrLf Case "NOOP","CWD" oSck.SendData "200 " & UCase(Chaine) & " command successful." & vbCrLf Case "PASV" SckProp(iSck).ftpDataSocket=GetAvailSck SckProp(SckProp(iSck).ftpDataSocket).ftpDataSocket=iSck SckProp(SckProp(iSck).ftpDataSocket).Proto=psckFtpData ExecuteGlobal "oSck" & SckProp(iSck).ftpDataSocket & ".LocalPort=0" ExecuteGlobal "oSck" & SckProp(iSck).ftpDataSocket & ".Listen" i=Eval("oSck" & SckProp(iSck).ftpDataSocket & ".LocalPort") oSck.SendData "227 Entering Passive Mode (" & Replace(oSck.LocalIP,".",",") & "," & i\256 & "," & i Mod 256 & ")." & vbCrLf Case "PWD","XPWD" If SckProp(iSck).Allowed=True Then oSck.SendData "257 ""/"" is current directory." & vbCrLF Else oSck.SendData "530 Please login with USER and PASS." & vbCrLf End If Case "QUIT" oSck.SendData "221 Thank You for using Microsoft Products!" & vbCrLf '### sur fin du send complete faire oSck.Close Case "SYST" If SckProp(iSck).Allowed=True Then oSck.SendData "215 Windows_NT version 5.0" & vbCrLf Else oSck.SendData "530 Please login with USER and PASS." & vbCrLf End If Case Else oSck.SendData "500 '" & Chaine & "': command not understood" & vbCrLf End Select End If Case psckHTTP '#### G�rer le serveur Web oSck.SendData "HTTP/1.1 200 OK" & vbCrLF & "Date: Mon, 13 Aug 2001 15:42:54 GMT" & vbCrLf & "Server: Apache/1.3.19 (Unix)" & vbCrLf & _ "Last-Modified: Thu, 22 Mar 2001 20:55:40 GMT" & vbCrLf & "ETag: ""13819d-62-3aba66cb""" & vbCrLf & "Accept-Ranges: bytes" & vbCrLf & _ "Content-Length: 101" & vbCrLf & "Connection: close" & vbCrLf & "Content-Type: text/html" & vbCrLf & vbCrLf & "<html>" & _ " <br>Click <a href=""http://www.interclasse.com"">here</a> to visit InterClasse</html>" Case psckProxy 'Proxy Server 'Get Host info i=Instr(Chaine,"Host: ")+6 strTemp=Mid(Chaine,i) strTemp=Left(strTemp,Instr(strTemp,vbCrLf)-1) '#### Replace GET with no host info '#### Remove proxy info from data received '######## ' Here is a way to hack incoming/outgoing data '######## 'V=Instr(Chaine,"&score=") 'If V>0 Then ' If Mid(Chaine,V+10,8)="&Pseudo=" Then ' Chaine=Left(Chaine,V+6) & "430" & Mid(Chaine,V+10) ' End If ' If Mid(Chaine,V+10,6)="&Temps" Then ' Chaine=Left(Chaine,V+6) & "430" & Mid(Chaine,V+10) ' End If 'End If '######## '######## 'The parent Socket has to Send Data i=GetAvailSck SckProp(i).Mode=msckClient SckProp(i).Proto=psckProxy SckProp(i).ProxySocket=iSck SckProp(i).Data=Chaine SckProp(iSck).ProxySocket=i ExecuteGlobal "oSck" & i & ".LocalPort=0" ExecuteGlobal "oSck" & i & ".Connect """ & strTemp & """,80" If Bench.Checked Then BenchClient2Proxy=BenchClient2Proxy+bytesTotal Client2Proxy.InnerText=BenchClient2Proxy End If Case Else MyLog "protocol " & SckProp(iSck).Proto & " unknown" End Select Else 'Client Select Case SckProp(iSck).Proto Case psckProxy If Bench.Checked Then BenchNet2Proxy=BenchNet2Proxy+bytesTotal Net2Proxy.InnerText=BenchNet2Proxy End If 'MyLog iSck & " - sending data with parent proxy socket " & SckProp(iSck).ProxySocket SckPRop(iSck).Data=Chaine ExecuteGlobal "oSck" & SckProp(iSck).ProxySocket & ".SendData SckProp(" & iSck & ").Data" End Select End If End If If iSck<>ActiveSck Then DisplaySck iSck,oSck.State Else DisplayState End If End Sub Sub evtSendComplete(ByRef oSck,iSck) 'When the Socket has finished sending data to the remote host Dim Info Info="" Select Case SckProp(iSck).Proto Case psckHTTP '### sauf si keep alive If SckProp(iSck).Mode=msckServer Then oSck.close Case psckProxy '### sauf si keep alive If SckProp(iSck).Mode=msckServer Then 'Close the server if the client is closed If eval("oSck" & SckProp(iSck).ProxySocket & ".state")=sckClosed Then oSck.close Info = " - to local request" Else Info = " - " & Len(SckProp(iSck).Data) & " bytes to remote" End If 'don't close the client, it is waiting on data Case psckFtpData oSck.Close Case Else 'By default don't close (psckEcho, psckDiscard...) End Select MyLog iSck & " - Send complete" & Info If iSck<>ActiveSck Then DisplaySck iSck,oSck.State Else DisplayState End If End Sub Sub evtConnectionRequest(ByRef oSck,iSck,Byval requestID) 'RequestID:long 'when the socket acts as a server and a remote host connects to it Dim x If Bench.Checked Then BenchNbConnect=BenchNbConnect+1 NbRequest.InnerText=BenchNbConnect End If x=GetAvailSck If SckProp(iSck).Proto=psckFtpData Then oSck.Close 'We have found the connection, kill the listener oSck.Accept requestID ElseIf x>-1 Then 'Accept only if we have an available socket to continue listening MyLog x & " - " & oSck.RemoteHostIP & ":" & oSck.RemotePort & " - Connection request n�" & requestID & " on port " & oSck.LocalPort 'Accept from another socket because this one should listen ExecuteGlobal "oSck" & x & ".LocalPort =" & oSck.LocalPort '=0 ? SckProp(x).Proto=SckProp(iSck).Proto SckProp(x).Mode=msckServer sckProp(x).ScanForVirus=sckProp(iSck).ScanForVirus ExecuteGlobal "oSck" & x & ".Accept " & requestID Select Case SckProp(iSck).Proto Case psckFTP SckProp(x).User="" SckProp(x).Password="" SckProp(x).Allowed=False SckProp(x).ftpType="A" SckProp(x).ftpRoot=SckProp(iSck).ftpRoot SckProp(x).ftpCurDir=SckProp(x).ftpRoot ExecuteGlobal "oSck" & x & ".SendData ""220 CPMSFTFTPA05 Microsoft FTP Service (Version 5.0)."" & vbCrLf" End Select DisplaySck x,Eval("oSck" & x & ".State") Else MyLog iSck & " - " & oSck.RemoteHostIP & " - No more socket for connection request n�" & requestID End If If iSck<>ActiveSck Then DisplaySck iSck,oSck.State Else DisplayState End If End Sub Sub evtSendProgress(ByRef oSck,iSck,Byval bytesSent, bytesRemaining) 'bytesSent:long, bytesRemaining:long MyLog iSck & " - Sending data to " & oSck.RemoteHostIP & ", " & bytesRemaining & " bytes remaining" End Sub Sub evtError(ByRef oSck,iSck, ByVal Number, Description, ByVal Scode, ByVal Source, ByVal HelpFile, ByVal HelpContext, ByRef CancelDisplay) 'Number:Integer, Description:String, Scode:Long, Source:String, HelpFile:String, HelpContext:Long, CancelDisplay:Boolean oSck.Close MyLog iSck & " - Error " & Number & " - " & Description CancelDisplay = True If iSck<>ActiveSck Then DisplaySck iSck,oSck.State Else DisplayState End If End Sub </script> <STYLE TYPE="text/css"> <!-- v\:* {behavior:url(#default#VML);} t\:* { behavior:url(#default#time2)} BODY { font-family: "Verdana, Arial, Helvetica, sans-serif"; background-color=#003159; color:#0000FF; font-size: 8pt; } TD { font-size: 8pt;} BUTTON { font-size: 7pt; cursor:hand; } TEXTAREA { font-family: "Verdana, Arial, Helvetica, sans-serif"; font-size: 7pt; } .shadow {filter:Shadow(color=998888,direction=120);height:40} .fading {font-size:20px;background-color:#003159;color:white;width:300; filter:Alpha(style=1,finishX=140)} --> </STYLE> </head> <body leftmargin=0 topmargin=0 rightmargin=0> <v:rect id=bg style="Position:absolute;LEFT:0pt;TOP:0pt;WIDTH:100%;HEIGHT:100%;Z-INDEX:-1" fillcolor=#003159> <v:fill type=gradient color2=#a8f4f7 angle=45 method="linear sigma"></v:fill> </v:rect> <table width=100% border=0><tr> <script language="vbscript"> 'Create the pool of usable connections (MSWinsock.Winsock) and connect the events For i=0 To SckMax document.write "<object id=""oSck" & i & """ classid=""clsid:248DD896-BB45-11CF-9ABC-0080C7E7B78D""></object>" document.write "<" & "script for=""oSck" & i & """ event=""Connect"" language=""vbscript"">evtConnect Me," & i & "</" & "script>" document.write "<" & "script for=""oSck" & i & """ event=""Close"" language=""vbscript"">evtClose Me," & i & "</" & "script>" document.write "<" & "script for=""oSck" & i & """ event=""DataArrival(ByVal bytesTotal)"" language=""vbscript"">evtDataArrival Me," & i & ",bytesTotal</" & "script>" document.write "<" & "script for=""oSck" & i & """ event=""Error(ByVal Number,Description,ByVal Scode,ByVal Source,ByVal HelpFile,ByVal HelpContext,ByRef CancelDisplay)"" language=""vbscript"">evtError Me," & i & ",Number,Description,Scode,Source,HelpFile,HelpContext,CancelDisplay</" & "script>" document.write "<" & "script for=""oSck" & i & """ event=""ConnectionRequest(Byval requestID)"" language=""vbscript"">evtConnectionRequest Me," & i & ",requestID</" & "script>" document.write "<" & "script for=""oSck" & i & """ event=""SendProgress(ByVal bytesRemaining)"" language=""vbscript"">evtSendProgress Me," & i & ",bytesRemaining</" & "script>" document.write "<" & "script for=""oSck" & i & """ event=""SendComplete"" language=""vbscript"">evtSendComplete Me," & i & "</" & "script>" 'The buttons document.write "<td><v:roundrect border=0 style=height:24pt;width:100%; arcsize=0.25 fillcolor=#483d8b id=btns" & i & " onclick=""vbscript:SckList.Value=" & i & ":DisplayState"">" document.write "<v:textbox><center><font color=white size=-1><b>" & i & "</b></center></font></v:textbox>" document.write "<v:fill type=gradient method=sigma angle=90 color2=#7b68ee id=fbtns" & i & "></v:fill></v:roundrect></td>" 'The animation document.write "<t:par begin=btns" & i & ".onmouseover>" document.write "<t:animateColor attributeName=fillcolor values=#483d8b;#7b68ee begin=0.4 dur=0.4 autoreverse=true targetElement=btns" & i & "></t:animateColor>" document.write "<t:animate attributeName=angle from=90 to=450 begin=0 dur=0.4 autoreverse=true targetElement=fbtns" & i & "></t:animate></t:par>" Next </script> </tr></table> <div class=shadow> <SELECT NAME="SckList" onchange="vbscript:DisplayState" style="font-family:tahoma,san-serif;font-size:12px;color:#003159;background-color:#D6E7EF;"> <script language="vbscript"> 'Display the list of available sockets For i=0 To SckMax document.write"<OPTION value=" & i & ">Socket " & i & "</option>" Next </script> </SELECT> <button class=shadow name=myState onclick="vbscript:DisplayState" Title="Display the state of the current socket - click to refresh" style='color:white;background-color:#5492a8;width:70;height:20'>Calculating...</button> <span class=fading contenteditable=true><b> PixyPortManager</b></span> </div> <table width=100% height=90%> <tr><td width=30%> <Table width=250 height=90%> <TR><TD align=right>Network adaptater :</TD><td><Select name=LocalBind Title="Choose your network adaptater"> <script language=vbscript> Dim IpConfigSet,strIP strIP="" 'Without WMI, use only 1 adapter On Error Resume Next Err.Number=0 set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") If Err.Number<>0 Then strIP="<option>" & oSck0.LocalIP On Error Goto 0 If strIP="" Then For Each IPConfig IN IPConfigSet If Not IsNull(IPConfig.IPAddress) Then For i=LBound(IPConfig.IPAddress) To UBound(IPConfig.IPAddress) If IPConfig.IPAddress(i)<>"" Then strIP=strIP & "<option value=""" & IPConfig.IPAddress(i) & """>" & IPConfig.IPAddress(i) Next End If Next End If document.Write strIP LocalBind.Value=oSck0.LocalIP </script> </Select></tr> <TR><TD align=right>Remote Host :</TD><td><input name=RemoteHost type=text Title="ex : localhost or 127.0.0.1"></td></tr> <TR><td align=right>Remote Port :</td> <td><input name=RemotePort type=text size=5 Title="21:ftp,80:http"><Input name=BtnCon type=button value="Connect" onclick="vbscript:btnconnect"></td> </TR> <TR><TD align=right><span Title="C for Client and S for Server">Type :</span></TD><td><SELECT NAME="Proto"><OPTION Value=-1>Proxy S<OPTION Value=7>Echo S<OPTION value=9 SELECTED>Discard S<OPTION value=21>FTP S<OPTION value=43>WhoIs C<OPTION value=80>HTTP C/S</SELECT> <Input name=BtnOption type=button value="Options" onclick="vbscript:btnOption"></td></tr> <TR><TD align=right>Local Port :</TD><td><input name=LocalPort type=text size=5><Input name=BtnListening type=button value="Listen" onclick="vbscript:btnListen"></td></tr> <TR><TD align=right>Protocole :</TD><td><SELECT NAME="Protocole"><OPTION value=0 SELECTED>TCP</option><OPTION value=1>UDP</option></SELECT><span ID=RemoteHostIP></span></td></tr> <TR><td align=right></td><td><Input name=BtnDiscon type=button value="Disconnect" onclick="vbscript:btnDisconnect"></td></TR> <TR height=100%><TD align=right>Data to send :<p><Input Name=btnSendData type=button value="Send" onclick="vbscript:SendData"></TD> <td width=100%> <TEXTAREA Name="DataToSend" WRAP="OFF" Title="Type your data to send" style="width:100%;height:100%"></TEXTAREA> <br><a href="mailto:antoinejl at hotmail.com" title="Report me bugs"><u style="text-underline-position:above;">JLA</u></a> </td></tr> </Table> </td><td width=100%> <span Title="Click here to display the received datas in hexa" onclick="DisplayHexa True">Data received :</span><input type=button style="font-size:8pt" onclick='vbscript:datareceived.innerhtml="":HexaToDisplay="":DisplayHexa False' Value='CLEAR'><input Type=CheckBox Name=Beep><span onclick="Beep.Checked=Not Beep.Checked">Beep </span><OBJECT ID="oBeep" CLASSID="java:java.awt.Button" STYLE="display:none;"></OBJECT> <input Type=CheckBox Name=RealTimeLog Checked>Real Time Log <input Type=CheckBox Name=Bench Checked OnClick="vbScript:If Me.Checked Then BenchClient2Proxy=0:BenchNet2Proxy=0:BenchNbConnect=0" Title="Benchmark the proxy">Activate Bench - <span ID=Client2Proxy Title="Data received from the client"></span>|<span ID=Net2Proxy Title="Data received from Internet"></span>|<span ID=NbRequest Title="Number of Connexion requests"></span> <DIV ID="DataReceived" contenteditable=true style="overflow-x:auto;overflow-y:scroll;border:'outset powderblue';width=expression(document.body.clientwidth - DataReceived.getBoundingClientRect().left);height:40%;FILTER: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=50);background-color=#003159;color=white;" ONMOUSEOVER="Me.style.backgroundColor='black'" ONMOUSEOUT="Me.style.backgroundColor='#003159'"></DIV> <br><span onclick=oSck0.aboutbox>Log :</span><input type=button style="font-size:8pt" onclick='vbscript:TheLog.innerhtml=""' Value='CLEAR'> <DIV ID="TheLog" WRAP="off" contenteditable=true style="overflow-x:hidden;overflow-y:scroll;border:'outset powderblue';background-color:transparent;width=expression(document.body.clientwidth - TheLog.getBoundingClientRect().left);height:40%;color:#80C0FF; FILTER: progid:DXImageTransform.Microsoft.Wave(freq=1,LightStrength=10,Phase=10,Strength=5);" ONMOUSEOVER="Me.style.backgroundColor='black'" ONMOUSEOUT="Me.style.backgroundColor='transparent'"></DIV> </td></tr> </table> </body> </html> |
|||||
![]()
|
|