VBScript获取外部IP地址并将其telnet到设备

时间:2014-08-15 16:21:15

标签: vbscript ip external telnet

我对编程有一些了解并且我已经搜索了一下网页,但我似乎无法找到我需要的东西。

这是交易,我有一个使用以太网模块进行Lantronix通信的设备,称为Xport。

现在,可以通过Web浏览器或Telnet配置该设备。

其中一个名为远程IP的选项。

我正在尝试开发一个可以捕获外部IP地址的脚本,将每个数字从该ip记忆到变量,然后通过telnet打开我的设备,访问他拥有的某个选项,然后写入该IP通过sendkeys或其他东西。

每个数字我的意思是192,数字1,数字9和数字2,例如。

另一种选择是通过网络浏览器执行相同操作的脚本。

我已经创建了一些批处理文件来处理其中一些,其中一个批处理文件要求输入IP,按编号排序(我必须写一切,0' s和所有,例如66写入066),然后打开telnet,在设备中插入密码,发送几个密钥,直到我想要的选项,输入该选项,写入我写的IP然后退出。但我发现脚本不是非常用户友好。

所以我正在寻找双击文件解决方案。

这是我迄今为止所做的。

首先是我今天使用的批处理文件。

@if (@CodeSection == @Batch) @then


@echo off

rem Use %SendKeys% to send keys to the keyboard buffer
set SendKeys=CScript //nologo //E:JScript "%~F0"

echo Please write the IP address one number at a time, pressing enter after each number

echo Insert first Number

set /p var1=

echo Insert second Number

set /p var2=

echo Insert ... Number

set /p var3=

echo Insert ... Number

set /p var4=

echo Insert ... Number

set /p var5=

echo Insert ... Number

set /p var6=

echo Insert ... Number

set /p var7=

echo Insert ... Number

set /p var8=

echo Insert ... Number

set /p var9=

echo Insert ... Number

set /p var10=

echo Insert ... Number

set /p var11=

echo Insert ... Number

set /p var12=

rem Starts Telnet and enters the device, then inserts the IP

start "" /B telnet.exe address.com 9999

ping -n 1 -w 1 127.0.0.1 > NUL
%SendKeys% "{p}{a}{s}{s}{w}{o}{r}{d}{ENTER}"

%SendKeys% "echo off{ENTER}"

%SendKeys% "echo off{1}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}"

%SendKeys% "echo off{%var1%}{%var2%}{%var3%}{ENTER}{%var4%}{%var5%}{%var6%}{ENTER}{%var7%}{%var8%}{%var9%}{ENTER}{%var10%}{%var11%}{%var12%}{ENTER}"

%SendKeys% "echo off{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}"

%SendKeys% "echo off{9}{ENTER}"

set /P "=" < NUL
ping -n 1 -w 1 127.0.0.1 > NUL
%SendKeys% "{ENTER}"

goto :EOF


@end


// JScript section

var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.SendKeys(WScript.Arguments(0));

如果我可以通过批处理文件获取外部IP并将每个数字放在一个变量中,然后将该蝙蝠与该蝙蝠混合,那么它也是一个解决方案。

我也有一些vbs文件,我想把它们放在一起。

首先获取外部IP的代码(这是我从这里得到的)

Option Explicit
Dim objHTTP : Set objHTTP = WScript.CreateObject("MSXML2.ServerXmlHttp")
objHTTP.Open "GET", "http://icanhazip.com", False
objHTTP.Send
Wscript.Echo objHTTP.ResponseText
Set objHTTP  = Nothing

然后将变量写入文本的代码(但我想要的是将ip写入telnet)

Dim Input, filesys, filetxt, getname, path
Input = InputBox("Enter your name") 

Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile("DataLog.txt", 8, True)
path = filesys.GetAbsolutePathName("DataLog.txt")
getname = filesys.GetFileName(path)
filetxt.WriteLine input & ", " & ServiceTag
filetxt.close

我试图将这两个混合起来,但它没有工作

Option Explicit
Dim objHTTP : Set objHTTP = WScript.CreateObject("MSXML2.ServerXmlHttp")
objHTTP.Open "GET", "http://icanhazip.com", False
objHTTP.Send
Set objHTTP  = Nothing

dim filesys, filetxt, getname, path
Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile("DataLog.txt", 8, True)
path = filesys.GetAbsolutePathName("DataLog.txt")
getname = filesys.GetFileName(path)
filetxt.WriteLine objHTTP.ResponseText & ", " & ServiceTag
filetxt.Close

顺便提一下,有一个问题,什么是服务标准!?!?!? (好吧,我会在google上检查一个,但是如果有人想告诉我,我将会受到赞赏)。

提前感谢您提供全部或任何帮助!

19-08-2014

好吧,马特,我几乎在那里,但我仍然错过了这个难题的平安,即通过sendkeys写外部ip,为此我试图用外部调用变量IP,但它不起作用,所以我需要像你说的那样将它分成数组。我只需要找到你的位置,然后用我的代码。

这是我的代码到目前为止(我不想为每个代码行提供四个空格,这里有一个更简单的方法来放置代码)。

Option Explicit
Dim objHTTP : Set objHTTP = WScript.CreateObject("MSXML2.ServerXmlHttp")
objHTTP.Open "GET", "http://icanhazip.com", False
objHTTP.Send

On Error Resume Next

Dim WshShell

set WshShell=CreateObject("WScript.Shell")

WshShell.run "cmd.exe"

WScript.Sleep 1000

WshShell.SendKeys "telnet domain.com 9999"

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys "p"

WshShell.SendKeys "a"

WshShell.SendKeys "s"

WshShell.SendKeys "s"

WshShell.SendKeys "w"

WshShell.SendKeys "o"

WshShell.SendKeys "r"

WshShell.SendKeys "d"

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys "1"

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

Set objWSHShell = WScript.CreateObject("WScript.Shell")

WScript.Sleep 1000

objWSHShell.SendKeys objHTTP.ResponseText

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WshShell.SendKeys ("{Enter}")

WScript.Sleep 1000

WScript.Quit 

Set objHTTP  = Nothing

所以现在我只需要将外部IP放在我所在的行

objWSHShell.SendKeys objHTTP.ResponseText

这是不行的它应该,我的意思是我可以让它写入一个文本文件的IP,我想它一次写一个字符(或不是吗?),所以如果它是的,它应该写入telnet,但它没有,这就是为什么我需要分开制动外部IP,按数字编号并添加点(。)而不用支架。

1 个答案:

答案 0 :(得分:0)

在最终的代码示例中,您使用Set objHTTP = Nothing删除对象引用,然后稍后尝试使用objHTTP.ResponseText再次引用它。如果没有别的,您需要将Set objHTTP = Nothing行移到底部。

猜测您使用它来获取戴尔系统信息的代码。由于您只是使用Writeline编写,因此我不会在您的代码中看到它

至于IP地址变量,您可以将字符串转换为字符数组并以此方式解决。

Function IPAddressToCharArray(pIpAddress)
    Dim intCounter
    Dim intLen
    Dim singleCharacter
    Dim strFormattedIpAddress
    Dim arrChars()

    ' Remove the periods
    ' strFormattedIpAddress = Replace(pIpAddress,".","")

    ' Set the array length
    intLen = Len(strFormattedIpAddress)-1
    redim arrChars(intLen)

    ' Cycle through the string
    For intCounter = 0 to intLen
        ' Capture the current character.
        arrChars(intCounter)  = Mid(strFormattedIpAddress, intCounter + 1,1)
    Next

    IPAddressToCharArray = arrChars
End Function

我没有看到需要这个,但它会创建数组。然后,您可以使用a来处理每个对象循环。

如果你想使用它,那么你只需要通过For Each Loop来提取每个字符。如果您使用option explicit,则需要声明这些变量。

For Each strSingleCharacter in IPAddressToCharArray(objHTTP.ResponseText)
    WshShell.SendKeys strSingleCharacter
Next 

查看this telnet示例,但不需要分解发送密钥的字符。由于sendkeys文档指出:&#34;将一个或多个击键发送到活动窗口,就好像它们是在键盘上键入一样。此方法类似于VB SendKeys方法。&#34;

例如: WshShell.SendKeys "telnet 55.42.58.123 49000"