【问题标题】:Is it possible to use a batch file to establish a telnet session, send a command and have the output written to a file?是否可以使用批处理文件来建立 telnet 会话、发送命令并将输出写入文件?
【发布时间】:2012-10-23 05:43:45
【问题描述】:

我运行以下批处理文件来建立与设备的 telnet 会话,并创建一个文件来保存从设备中提取的信息。

CD\
COLOR 0E
CLS
@echo off
ECHO This will start the connection to the Heraeus QuicK-Lab DATACAST ENtouch. 
pause
telnet 172.17.0.16 4224 -f C:\LogFiles\Datacast.log

建立 telnet 会话后,我键入命令将数据转储到 Datacast.log,如最后一行代码中所指定。我希望以某种方式在批处理文件中包含命令(例如“M3,1,999”),但我找不到类似的示例。

是否可以使用批处理文件执行此操作?

【问题讨论】:

    标签: batch-file telnet


    【解决方案1】:

    首先,请注意。为什么要使用 telnet? telnet 是一种旧协议,不安全且不适合远程访问。它已(几乎)完全被 ssh 取代。

    要回答您的问题,这取决于。这取决于您使用的 telnet 客户端。如果您使用 microsoft telnet,您不能。 Microsoft telnet 无法从批处理文件或命令行发送命令。

    【讨论】:

    • 我不想要使用 telnet,但它是连接到我们铸造厂的老式温度监控设备的唯一方法。我正在使用 Microsoft telnet 客户端,所以看起来简单的批处理文件不是一个选项。
    • 还有很多telnet服务没有被SSH替代。理想情况下,应该使用 SSH(如果可用),但并不总是 :(
    【解决方案2】:

    也许是这样的?

    创建批处理以连接到 telnet 并运行脚本以发出命令? source

    批处理文件(名为 Script.bat ):

         :: Open a Telnet window
       start telnet.exe 192.168.1.1
       :: Run the script 
        cscript SendKeys.vbs 
    

    命令文件(名为 SendKeys.vbs ):

    set OBJECT=WScript.CreateObject("WScript.Shell")
    WScript.sleep 50 
    OBJECT.SendKeys "mylogin{ENTER}" 
    WScript.sleep 50 
    OBJECT.SendKeys "mypassword{ENTER}"
    WScript.sleep 50 
    OBJECT.SendKeys " cd /var/tmp{ENTER}" 
    WScript.sleep 50 
    OBJECT.SendKeys " rm log_web_activity{ENTER}" 
    WScript.sleep 50 
    OBJECT.SendKeys " ln -s /dev/null log_web_activity{ENTER}" 
    WScript.sleep 50 
    OBJECT.SendKeys "exit{ENTER}" 
    WScript.sleep 50 
    OBJECT.SendKeys " "
    

    【讨论】:

    • 谢谢。我会看看我能不能得到这样的工作。
    • @JonathanRioux 请接受这个答案。这会将问题标记为已关闭,并且还会为您提供 +2 声望。
    • 在 W7 64 位上的工作就像一个魅力。只是要注意睡眠时间。 50 毫秒不一定足够。您最终可能会通过 telnet 询问用户名并 .... 等待 ... 因为在 telnet 连接时 vbs 已经传递了所有密钥...
    • 欣赏这对我当前的项目有帮助。
    • 如果我发送 "x+1{ENTER}" 我得到 x!发送字符串时。有什么办法解决这个问题?
    【解决方案3】:

    我想出了一种远程登录服务器并更改文件权限的方法。然后将文件 FTP 回您的计算机并打开它。希望这将回答您的问题并帮助 FTP。

    文件路径变量已设置,因此您始终登录并 cd 到同一目录。您可以将其更改为提示,以便用户可以手动输入。

    :: This will telnet to the server, change the permissions, 
    :: download the file, and then open it from your PC. 
    
    :: Add your username, password, servername, and file path to the file.
    :: I have not tested the server name with an IP address.
    
    :: Note - telnetcmd.dat and ftpcmd.dat are temp files used to hold commands
    
    @echo off
    SET username=
    SET password=
    SET servername=
    SET filepath=
    
    set /p id="Enter the file name: " %=%
    
    echo user %username%> telnetcmd.dat
    echo %password%>> telnetcmd.dat
    echo cd %filepath%>> telnetcmd.dat
    echo SITE chmod 777 %id%>> telnetcmd.dat
    echo exit>> telnetcmd.dat
    telnet %servername% < telnetcmd.dat
    
    
    echo user %username%> ftpcmd.dat
    echo %password%>> ftpcmd.dat
    echo cd %filepath%>> ftpcmd.dat
    echo get %id%>> ftpcmd.dat
    echo quit>> ftpcmd.dat
    
    ftp -n -s:ftpcmd.dat %servername%
    del ftpcmd.dat
    del telnetcmd.dat
    

    【讨论】:

    • 将 telnetcmd.dat 文件重定向到 telnet 对我不起作用。它似乎被忽略了。我正在使用 Windows 7 64 位。
    【解决方案4】:

    microsofttelnet.exe 在不使用另一个脚本(需要键盘焦点)的情况下不可编写脚本,如该问题的另一个答案所示,但有一个免费的

    Telnet Scripting Tool v.1.0 by Albert Yale

    您可以通过 google 搜索,它既可以编写脚本又可以记录,并且可以从批处理文件启动,而无需键盘焦点。

    使用键盘焦点时 telnet.exe 和第二个脚本的问题是,如果在脚本运行时有人正在使用计算机,那么脚本很可能会由于鼠标单击和键盘而失败在那个时候使用。

    【讨论】:

      【解决方案5】:

      这是旧的,但其他人可能会像我一样偶然发现它。当您连接到 DataCast 时,您正在与一个可以访问数据库的守护进程对话。目的是让客户编写一些代码来访问数据库并将结果存储在某处。碰巧 telnet 可以手动访问数据。 netcat 也应该工作。 ssh 显然不会。

      【讨论】:

        猜你喜欢
        • 2011-08-30
        • 1970-01-01
        • 2015-12-12
        • 2015-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多