首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >telnet上的变量

telnet上的变量
EN

Stack Overflow用户
提问于 2019-07-30 14:27:23
回答 2查看 349关注 0票数 0

我对编码非常陌生,我需要一个小的自动化批处理文件。

我通常只是从CMD打开Telnet并这样做:

I型:o 192.168.1.248

我连接到我发送的字符串WE1*1RTMP的设备,设备用E1*1RTMP进行响应。

这是正确的,一切正常。

但是我想让它成为一种自动化,而不需要输入所有内容,只需启动一个.bat文件。

  • 我在Ncat中都做到了这一点,创建了一个bat文件,上面写着:echo WE1*1RTMP | ncat 192.1568.1.248 23和所有东西都能工作。
  • 我还可以使用Plink和一个.bat文件来完成这个任务,plink.exe -load RECtelnet < *path to a text file containing the WE1*1RTMP command.现在需要一种方法来检查设备的响应。

当命令被正确地接收和执行时,我得到的答案是E1*1RTMP,但是我希望有一些检查这个的东西。比如,如果我得到的响应与这个响应相同,那么所有的响应在运行后都会消失,但是如果响应是不同的,比如当我键入一个无法从设备中识别的命令时所得到的E10错误,而不是消失cmd窗口,只会说“嗨,您的命令失败了”之类的话。

我也可以使用SSH发送这个命令,我有另一个名为"REC“的Plink配置文件,它通过SSH连接我,如果这比telnet更容易自动化的话。

我怎么才能把这个存档?感谢所有愿意帮忙的人。

EN

回答 2

Stack Overflow用户

发布于 2019-07-30 15:04:03

对你来说,做你想做的事情最简单的方法可能是:

  1. 安装python
  2. 将其写入文本文件(例如使用记事本),并将其保存为以.py结尾的内容: 导入套接字导入回溯尝试: mysock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) mysock.connect(“192.168.1.248”,(23) mysock.send(b"WE1*1RTMP\n") read_so_far =b“,而b"E1*1RTMP".startswith(read_so_far):read_bit = sock.recv(1024) if read_bit == b”:print(未收到完整消息);有“,repr(Read_so_far)”输入(“按enter以继续.")如果read_so_far += read_bit (b“E1*1 1RTMP "):print("Got message")则中断read_so_far.startswith:print(”获取错误消息:",repr(read_so_far))输入(“按enter以继续.”)除了e: traceback.print_exc()输入的异常(“按enter以继续. ")加薪 注意到:在那里缩进行的方式很重要。
  3. 双击该文件现在应该做你想做的事。如果出了什么问题,在这里请求帮助之前,打开一个命令提示符,cd到相关目录,并在命令行使用python myfile.py (或您命名的文件)运行它。这里的人需要这样的输出。
  4. 在将来的某个时候,拿起一本关于python的书,或者注册一门专注于python的课程,或者在coursera或其他地方学习。我听说过关于"Python for Everybody“的一些好东西,但也有很多东西--这些天来,当地大书店的电脑版面中有10%以上是试图教你python的书。
票数 0
EN

Stack Overflow用户

发布于 2019-07-30 15:09:33

我修改了示例脚本,使其更加紧凑,使用yoru命令和IP,并使用telnet代替SSH等。

代码语言:javascript
复制
REM Script Name:  TelnetToDevice.cmd
@(
  SETLOCAL EnableDelayedExpansion
  ECHO OFF
  REM SETUP Device Connection Details and commands
  SET "_PLink.Path=%~dp0plink.exe"
  SET "_PLink.Method=-telnet"
  REM SET "_PLink.Method=-ssh"
  SET "_Device.User=USERNAME"
  SET "_Device.PW=PASSWORD"
  SET "_Devices.List="192.1568.1.248""
  SET "_Devices.Cmd.List="WE1*1RTMP""
  SET /A "_Results.Count=0"
)


FOR %%A IN (%_Devices.List%) DO (
  FOR %%B IN (%_Devices.Cmd.List%) DO (
    FOR /F "Tokens=*" %%C IN ('
      ECHO.Y^|%_PLink.Path% %_PLink.Method% %_Device.User%@%%~A -pw %_Device.PW% "%%~B"
    ') DO (
      ECHO.Results is "%%C"
      SET /A "_Results.Count+=1"
      SET "_Result.!_Results.Count!=%%C"
    )
  )
)

ECHO.
ECHO.Listing all Variables generated:
ECHO.
SET "_Result."

PAUSE

(
  ENDLOCAL
  EXIT /B 0
)

好的,如果您只需要从该命令中收集输出,也许可以启动另一个命令来响应,那么在CMD中使用PLINK是相当容易的,NCAT也应该这样做。

(我使用Plink从CMD连接到Cisco设备来收集数据,并在得到某些响应时运行一些简单的命令)

这是通过在FOR /F循环中解析结果从命令中捕获输出来完成的。

在CLI直接:

NCAT

代码语言:javascript
复制
FOR /F "Tokens=*" %A IN ('
  ECHO.WE1*1RTMP^| ncat 192.1568.1.248 23
') DO (
  ECHO.%%A
  SET "_Result=%%A"
)

PLINK

代码语言:javascript
复制
FOR /F "Tokens=*" %A IN ('
  plink.exe -load RECtelnet ^< "C:\path\to\file containing WE1*1RTMP command.txt"
') DO (
  ECHO.%%A
  SET "_Result=%%A"
)

注意,我假设您知道,在上述命令中,您将需要在这些情况下提供用户名密码等,就像您说的那样,这些都是工作命令。

我碰巧有一个脚本,用于连接多个设备并运行命令,它满足了您的需要,我将编写一个精简的版本,但似乎值得将其作为运行在CMD脚本中的示例:

下面是用于检查和修复光纤交换机的实际CMD脚本的外壳:

代码语言:javascript
复制
@(
    SETLOCAL ENABLEDELAYEDEXPANSION
    ECHO OFF
    REM SETUP Device Connection Details and commands
    SET "_PLink.Path=%~dp0plink.exe"
    SET "_Device.User=USERNAME"
    SET "_Device.PW=PASSWORD"
    SET "_Devices.List="IP/Hostname1" "IP/Hostname_2" "IP/Hostname_3" "IP/HostnameN""
    SET "_Devices.Cmd.List="show feature ^| inc http" "show system internal flash ^| include Mount" "show system internal flash ^| include tmp" "dir ^| include free" "show system internal dir /var/tmp ^| Inc 'log.+[0-9][0-9][0-9][0-9][0-9][0-9]'" "show environment fan ^| ex ---- ^| ex Filter" "show environment temperature ^| ex ---- ^| ex '('""

    REM Setup Log files and Email
    CALL :GetDateTime
    SET "_Log.Folder=%~dp0Log"
    SET "_eMail.Folder=%~d0\Temp"
    IF NOT EXIST "!_Log.Folder!" ( MD "!_Log.Folder!" )
    IF NOT EXIST "!_eMail.Folder!" ( MD "!_eMail.Folder!" )
    SET "_Log.File=!_Log.Folder!\%~n0_Log_!IsoDate!_!IsoTime!.log"
    SET "_eMail.File=!_eMail.Folder!\%~n0_eml.tmp"
    SET "_eMail.Subject=%~n0 - Log"
    ECHO.>"!_eMail.File!"
    SET "_SMTPServer=SMTPServerIP"
    SET "_RcptTo=Yourname@YourDomain.com"
    SETLOCAL DISABLEDELAYEDEXPANSION
)
CALL :Main


(
    ENDLOCAL
    Exit /b %eLvl%
)


:Main
    FOR %%A IN (%_Devices.List%) DO (
        CALL :OutEcho
        CALL :DateEcho %%~A:
        FOR %%B IN (%_Devices.Cmd.List%) DO (
            FOR /F "Tokens=*" %%C IN ('
                ECHO.Y^|%_PLink.Path% -ssh %_Device.User%@%%~A -pw %_Device.PW% "%%~B"
            ') DO (
                CALL :OutEcho %%~A: %%~C
                (
                    ECHO.%%~C | FIND /I "log" >NUL
                ) && (
                    FOR /F "Tokens=1" %%D IN ("%%~C") DO (
                        CALL :OutEcho %%~A: Deleting:  %%~D
                        FOR %%b IN (
                            %_Devices.Cmd.DeleteFoundFile%
                        ) DO (
                            FOR /F "Tokens=*" %%c IN ('
                                %_PLink.Path% -ssh %_Device.User%@%%~A -pw %_Device.PW% "%%~b%%~D"
                            ') DO (
                                CALL :OutEcho %%~A: %%~c
                            )
                            CALL :OutEcho %%~A: Deleted:  %%~D
                        )
                    )
                )
            )
        )

    )
    CALL :SendMail "%_eMail.File%" "%_eMail.Subject%"
GOTO :EOF


:SendMail
    ECHO.Sending Email for "%~2"
    CALL ECHO CALL "%~dp0mailsend.exe" -domain reval.com -smtp %_SMTPServer% -f %Computername%@reval.com -t %_RcptTo% -sub "%~2" -attach "%~1",text,i
    CALL "%~dp0mailsend.exe" -domain reval.com -smtp %_SMTPServer% -f %Computername%@reval.com -t %_RcptTo% -sub "%~2" -attach "%~1",text,i
GOTO :EOF


:DateEcho
    (
        SETLOCAL
        CALL :GetDateTime
    )
    CALL :OutEcho %TDate% - %*
    ENDLOCAL
GOTO :EOF


:OutEcho
    ECHO.%*
    ECHO.%*>>"%_Log.File%"
    ECHO.%*>>"%_eMail.File%"
GOTO :EOF


:GetDateTime
    FOR /F "Tokens=1-7 delims=MTWFSmtwfsouehrandit:-\/. " %%A IN ("%DATE% %TIME: =0%") DO (
        FOR /F "Tokens=2-4 Skip=1 Delims=(-)" %%a IN ('ECHO.^| DATE') DO (
            SET "%%~a=%%~A"
            SET "%%~b=%%~B"
            SET "%%~c=%%~C"
            SET /a "#%%~a=1%%~A - (2%%~A-1%%~A)"
            SET /a "#%%~b=1%%~B - (2%%~B-1%%~B)"
            SET /a "#%%~c=1%%~C - (2%%~C-1%%~C)"
            SET "HH=%%~D"
            SET "Mn=%%~E"
            SET "SS=%%~F"
            SET "Ms=%%~G"
            SET /a "#HH=1%%~D - (2%%~D-1%%~D)"
            SET /a "#Mn=1%%~E - (2%%~E-1%%~E)"
            SET /a "#SS=1%%~F - (2%%~F-1%%~F)"
            SET /a "#Ms=1%%~G - (2%%~G-1%%~G)"
            SET /a "#TMinutes=((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E))"
            SET /a "#TSeconds=((((1%%~D - (2%%~D-1%%~D))*60)+(1%%~E - (2%%~E-1%%~E)))*60)+(1%%~F - (2%%~F-1%%~F))"
        )
    )
    SET "TTime=%HH%.%Mn%.%SS%"
    SET "IsoTime=%HH%.%Mn%.%SS%.%Ms%"
    SET "TDate=%yy%-%mm%-%dd%"
    SET "IsoDate=%yy%-%mm%-%dd%"
GOTO :EOF

下面是一个更严格的脚本,直接使用您提供的信息。

代码语言:javascript
复制
REM Script Name:  TelnetToDevice.cmd
@(
  SETLOCAL EnableDelayedExpansion
  ECHO OFF
  REM SETUP Device Connection Details and commands
  SET "_PLink.Path=%~dp0plink.exe"
  SET "_PLink.Method=-telnet"
  REM SET "_PLink.Method=-ssh"
  SET "_Device.User=USERNAME"
  SET "_Device.PW=PASSWORD"
  SET "_Devices.List="192.1568.1.248""
  SET "_Devices.Cmd.List="WE1*1RTMP""
  SET /A "_Results.Count=0"
)


FOR %%A IN (%_Devices.List%) DO (
  FOR %%B IN (%_Devices.Cmd.List%) DO (
    FOR /F "Tokens=*" %%C IN ('
      ECHO.Y^|%_PLink.Path% %_PLink.Method% %_Device.User%@%%~A -pw %_Device.PW% "%%~B"
    ') DO (
      ECHO.Results is "%%C"
      SET /A "_Results.Count+=1"
      SET "_Result.!_Results.Count!=%%C"
    )
  )
)

ECHO.
ECHO.Listing all Variables generated:
ECHO.
SET "_Result."

PAUSE

(
  ENDLOCAL
  EXIT /B 0
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57274031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档