Option Explicit Dim oHttpRequest, strUrl, userPassword Dim strExpr, MyArray Dim stm, strResult Dim RegExCd, RegExBody Set RegExCd = New RegExp RegExCd.Pattern = "(Curr Dir:)" & "(.+)\n" RegExCd.Global = True Set RegExBody = New RegExp RegExBody.Global = true RegExBody.Pattern = "((.|\n)*)" Dim cwd Dim Match,mc,Matches,m Dim Get_Data Dim fso Dim strFolderName WScript.StdOut.Write "'telnet.cgi'がある場所を入力してください。 (例:example.com/hoge/telnet.cgi):" strUrl =Wscript.StdIn.ReadLine If strUrl = "" Then Wscript.Echo "Cancelled." Wscript.Quit End If If Left(strUrl, 7) <> "http://" Then strUrl = "http://" & strUrl End If On Error Resume Next Set oHttpRequest = CreateObject("Microsoft.XMLHTTP") oHttpRequest.Open "GET", strUrl, False If Err.Number <> 0 Then WScript.echo strUrl & "は有効なアドレスではありません。" 'WScript.echo "Error : " & Err.Number & ": " & Err.Description WScript.Quit End If On Error Goto 0 oHttpRequest.Send '失敗した場合は関数を終了します。 If (oHttpRequest.Status < 200 Or oHttpRequest.Status >= 300) Then Wscript.Quit WScript.StdOut.Write "パスワードを入力してください:" userPassword = Wscript.StdIn.ReadLine ' パスワード送信とカレントディレクトリ取得 Set oHttpRequest = WScript.CreateObject("Microsoft.XMLHTTP") Call oHttpRequest.Open("POST", strUrl, False) Call oHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") Call oHttpRequest.Send("pass="&userPassword) Set Matches = RegExCd.Execute(oHttpRequest.responseText) If Err.Number <> 0 Or Matches.Count = 0 Then WScript.echo "アドレスまたはパスワードが有効ではありません。" WScript.Quit End If On Error Goto 0 For Each Match in Matches Get_Data = Replace(Replace(Replace(Match.Value, vbCr, ""), vbLf, ""), vbCrLf, "") If InStr(Get_Data,"Curr Dir:") <> 0 Then cwd=right(Get_Data, len(Get_Data)-9) Next Do WScript.StdOut.Write cwd&":>" strExpr = Wscript.StdIn.ReadLine If strExpr <> "" Then MyArray = Split(strExpr, " ", -1, 1) Select Case LCase(Trim(MyArray(0))) Case "exit" WScript.Quit Case "get" dtmGet MyArray(1) Case "put" dtmPut MyArray(1) Case Else ' 要求 Set oHttpRequest = WScript.CreateObject("Microsoft.XMLHTTP") Call oHttpRequest.Open("POST", strUrl, False) Call oHttpRequest.setRequestHeader("Accept-Encoding", "gzip,deflate,compress") Call oHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") Call oHttpRequest.Send("pass="&userPassword&"&dir="&cwd&"&cmd="&strExpr) '返答をShift_Jisのテキストにする Set stm = CreateObject("ADODB.Stream") stm.Type = 1 'バイナリモード stm.Open stm.Write oHttpRequest.responseBody 'バイナリを書き込み stm.Position = 0 '先頭に戻してから stm.Type = 2 'テキストモードに変更 stm.Charset = "Shift_JIS" strResult = stm.ReadText(-1) 'データ全体を読み込む stm.Close Set mc = RegExBody.Execute(strResult) WScript.Echo Replace(Replace(mc(0).SubMatches(0), "<", "<"), ">", ">") End Select Set stm = Nothing Set oHttpRequest = Nothing Set strExpr = Nothing Set Matches = RegExCd.Execute(strResult) For Each Match in Matches Get_Data = Replace(Replace(Replace(Match.Value, vbCr, ""), vbLf, ""), vbCrLf, "") If InStr(Get_Data,"Curr Dir:") <> 0 Then cwd=right(Get_Data, len(Get_Data)-9) Next End If Loop Wscript.Quit Sub dtmGet(file) Dim yn Set fso = CreateObject("Scripting.FileSystemObject") If (fso.FileExists(file)) Then WScript.StdOut.Write "同名のファイルがあります。上書きしますか?(はい(y)/いいえ(n)): " yn = Wscript.StdIn.ReadLine If yn = "" Or LCase(yn) = "n" Then WScript.Echo "ダウンロードを中止しました。" Set fso = Nothing Set yn = Nothing Exit Sub End If End If Dim data, xmldom, node Set xmldom = WScript.CreateObject("Microsoft.XMLDOM") Set node = xmldom.CreateElement("base64-node") node.DataType = "bin.base64" Set oHttpRequest = WScript.CreateObject("Microsoft.XMLHTTP") Call oHttpRequest.Open("POST", strUrl, False) Call oHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") Call oHttpRequest.setRequestHeader("Accept-Encoding", "gzip,deflate") Call oHttpRequest.Send("pass="&userPassword&"&dir="&cwd&"&cmd=perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' < "&cwd&"/"&file) Set stm = CreateObject("ADODB.Stream") stm.Type = 1 'バイナリモード stm.Open stm.Write oHttpRequest.responseBody 'バイナリを書き込み stm.Position = 0 stm.Type = 2 'テキストモードに変更 stm.Charset = "Shift_JIS" stm.LineSeparator = 10 Set oHttpRequest = Nothing Dim records, i i = 0 Do While stm.EOS = False records = stm.ReadText(-2) strResult = strResult & records If InStr(records,"") Then i = 0 If i = 1 Then node.text = node.text & records If InStr(records,"") Then i = 1 Loop stm.Close Set stm = Nothing If IsNull(node.NodeTypedValue) Then Wscript.Echo "ファイルが存在しません" Wscript.Echo node.text Wscript.Echo strResult Exit Sub End If ' SaveOptionsEnum Values Const adSaveCreateNotExist = 1 ' ファイルがないとき作成する Const adSaveCreateOverWrite = 2 ' ファイルがあるとき上書きする Set stm = CreateObject("ADODB.Stream") stm.Type = 1 stm.Open stm.write node.NodeTypedValue stm.saveToFile file, adSaveCreateOverWrite stm.Close Set stm = Nothing Set node = Nothing Set xmldom = Nothing End Sub Sub dtmPut(file) Set fso = CreateObject("Scripting.FileSystemObject") If Not(fso.FileExists(MyArray(1))) Then WScript.Echo "ファイルが存在しません" Set fso = Nothing Exit Sub End If Dim data, xmldom, node, plText, yn ' サーバーでのカレントディレクトリにあるファイル名一覧を取得 Set oHttpRequest = WScript.CreateObject("Microsoft.XMLHTTP") Call oHttpRequest.Open("POST", strUrl, False) Call oHttpRequest.setRequestHeader("Accept-Encoding", "gzip,deflate,compress") Call oHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") Call oHttpRequest.Send("pass="&userPassword&"&dir="&cwd&"&cmd=ls") 'ファイル名一覧ををShift_Jisのテキストにする Set stm = CreateObject("ADODB.Stream") stm.Type = 1 'バイナリモード stm.Open stm.Write oHttpRequest.responseBody 'バイナリを書き込み stm.Position = 0 '先頭に戻してから stm.Type = 2 'テキストモードに変更 stm.Charset = "Shift_JIS" strResult = stm.ReadText(-1) 'データ全体を読み込む stm.Close Set stm = Nothing Set oHttpRequest = Nothing Set strExpr = Nothing Set Matches = RegExBody.Execute(strResult) For Each Match in Matches Get_Data = Replace(Replace(Replace(Match.Value, vbCr, ""), vbLf, ""), vbCrLf, "") If InStr(Get_Data, file) > 0 Then WScript.StdOut.Write "同名のファイルがあります。上書きしますか?(はい(y)/いいえ(n)): " yn = Wscript.StdIn.ReadLine If yn = "" Or LCase(yn) = "n" Then WScript.Echo "アップロードを中止しました。" yn = "n" End If End If Next Set Matches = Nothing Set Match = Nothing If LCase(yn) = "n" Then Exit Sub Set xmldom = WScript.CreateObject("Microsoft.XMLDOM") Set node = xmldom.CreateElement("base64-node") node.DataType = "bin.base64" Set stm = WScript.CreateObject("ADODB.Stream") stm.Type = 1 stm.Open stm.LoadFromFile file node.NodeTypedValue = stm.Read stm.Close plText = replace(replace(node.Text,"+","-"),"/","_") Set stm = Nothing Set oHttpRequest = WScript.CreateObject("Microsoft.XMLHTTP") Call oHttpRequest.Open("POST", strUrl, False) Call oHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") Call oHttpRequest.setRequestHeader("Accept-Encoding", "compress,gzip,deflate") Call oHttpRequest.Send("pass="&userPassword&"&dir="&cwd&"&cmd=perl -MMIME::Base64 -le 'print decode_base64(join """", map {chr} map {~ s/95/47/g;$_;} map {~ s/45/43/g;$_;} map {ord} split //, """&plText&""")' > "&cwd&"/"&file) '返答をShift_Jisのテキストにする Set stm = CreateObject("ADODB.Stream") stm.Type = 1 'バイナリモード stm.Open stm.Write oHttpRequest.responseBody 'バイナリを書き込み stm.Position = 0 '先頭に戻してから stm.Type = 2 'テキストモードに変更 stm.Charset = "Shift_JIS" strResult = stm.ReadText(-1) 'データ全体を読み込む stm.Close Set stm = Nothing Set oHttpRequest = Nothing End Sub