• Expect 在网络管理中发挥着重要作用


    原文链接

    废话 可忽略


     

    接触Expect是迫不得已。系统管理员在工作中经常会遇到这样的问题,需要实现一个自动交互的工具,这个工具可以自动Telnet或者Ftp到指定的服务器上,成功login之后自动执行一些命令来完成所需的工作。

      当然,有很多编程语言可以去解决此类问题,比如用C、Perl、或者Expect。

      显然,尽管C是无所不能的,但是解决此类问题还是比较困难,除非你熟悉Telnet或者Ftp协议。

      曾经见过别人用C实现了一个简单的Telnet客户端协议的程序,可以在这个程序加入自己的代码来捕获服务端的输出,根据这些输出来发送适当的指令来进行远程控制。

      使用Perl一样可以实现这样的功能,然而,Expect做的更出色,而且除支持Unix/Linux平台外,它还支持Windows平台,它就是为系统管理和软件测试方面的自动交互类需求而产生的


    介绍Expect的时候,不得不说到TCL,毕竟这个语言是用TCL写的,于是,其中除了部分的自有命令外,语法也都是TCL的语法,所以在Expect教程里面,将会重点通过一些程序来介绍Expect的功能。

    先看一个最简单的Expect程序

    #!/usr/bin/expect

    set timeout 10

    spawn telnet 10.80.1.23

    expect "login:"

    send "user\r"

    expect "Password:"

    send "123456\r"

    expect "%"

    puts “Telnet connection established”

    对于Expect程序,是可以以tcl后缀名结尾的,上一个程序的名字为testTelnet.tcl,且执行方法和tcl也一致,直接./testTelnet.tcl即可,但是注意文件的第一行,在TCL程序中,第一行的内容为

    #!/usr/bin/tclsh

    而在这里变为了

    #!/usr/bin/expect

    这个程序的作用如下,

    1.         建立一个到10.80.1.23的telnet连接,由spawn telnet 10.32.17.10来完成,

    2.         等待屏幕打印login,由expect “login:”来实现

    3.         然后发送用户名user,由send “user\r”来完成,其中\r表示在输入user后按下回车键

    4.         等待屏幕打印Password:,由expect “Password”来实现

    5.         发送密码123456,同第3步

    6.         等待登录成功的提示符%

    7.         输出登录成功消息

    这是自动通过telnet登录的程序,基本上程序中的每句话都被解释过了,唯一剩下的就是set timeout 10是什么意思呢?

    我们可以看到,上面expect都是用来等待某个结果出来的,如果这个结果一直不出来怎么办?难道程序一直等下去么?当然不是,所以这里就有了timeout,也就是程序如果在等待10s种后没有得到期望结果,将会自动退出。如果不设置timeout的话,expect默认的时间是20s。

    而至于spawn,send,expect,这些都是内置的expect命令,其中spawn专门用来建立网络连接的时候用的,记住就可以了。

    在这里,需要提示的是在使用expect命令等待内容的时候,后面的内容一定要是屏幕输出的最后内容。比如上述程序中等到了“login”,“%”等,都是屏幕输出的最后,至于为什么,将在以后描述。

     

  • 相关阅读:
    写壳笔记一(加节表)
    cs_forums_GetForumsModeratedByUser///cs_forums_GetUnmoderatedPostStatus
    cs_Favorites_Get///cs_Favorites_GetSections
    cs_Feed_UpdateFeedStatus///cs_FeedPost_GetPost///cs_FeedPost_GetPostFullDetails///cs_FeedPost_UpdatePosts
    又来牢骚一下
    cs_Favorite_Delete///cs_Favorite_Get
    cs_Folder_GetFolders///cs_Folder_GetSummary///cs_Folder_MoveFolder
    cs_Folder_RenameFolder///cs_forums_GetForumMessages///cs_forums_GetForumModerators
    cs_Favorites_GetUsers///cs_Favorites_GetUsersWatching
    cs_Feed_AddFeed///cs_Feed_GetAll
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2548655.html
Copyright © 2020-2023  润新知