我对编程有一些了解并且我已经搜索了一下网页,但我似乎无法找到我需要的东西。
这是交易,我有一个使用以太网模块进行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,按数字编号并添加点(。)而不用支架。
答案 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"