• try expect and autoexpect


    若在Linux下用ET实现基本的SU的功能,也可以用expect实现哈,多谢小鱼提醒。。。

    转一篇expect相关的帖子,实践后再贴。

    expect是一个可以根据预先编好的脚本来实现与另外一个应用程序的交互。
    而autoexpect则相当于一个录制脚本的程序(有点像Winword里的宏),
    能够记录你输入的命令,下次只要运行该脚本就能够“昨日重现“,很方便!
    比如录制xrgsu_cracked(xrgsu的破解版,参见这里


    最首先有必要了解的一句的含义:
    autoexpect -p -f xrgsu.exp 

    -p选项使autoexpect只找寻最后的输出,
    这个选项对于有大量输出特别有用(你肯定不希望这个脚本上Mb吧)
    -f选项定制录制脚本的文件名为"xrgsu.exp"程序执行全过程:


     <dracula>: autoexpect 会记录之后的所有操作,直到用"exit"退出程序。


    autoexpect -p -f xrgsu.exp xrgsu_cracked 
    autoexpect started, file is xrgsu.exp
    XRGSupplicant 1.1.1
    Ruijie Network CopyRight 2004-2005
    Please input your user name:myusername
    Please input your password:输入了密码,看不见的
    Use DHCP,1-Use,0-UnUse(Default: 0):
    You have 2 Nic:
    0. eth0 Desc: (null)
    1. eth1 Desc: (null)
    Please select which NIC will be used(0-1,Default:0)
    Use default auth parameter,0-Use 1-UnUse(Default: 0):
    Searching server...
    Connecting server...
    Authenticating...

    Authenticate SUCCESSFULLY!
    Please input 'unauth' to LogOff:unauth
    xrgsu exit!
    autoexpect done, file is xrgsu.exp

    这里连上之后就马上输入了unauth退出了xrgsu_cracked,只有autoexpect才会执行文毕。
    得到的脚本如下:



    #!/usr/bin/expect -f
    #
    # This Expect script was generated by autoexpect on Tue May 8 18:04:56 2007
    # Expect and autoexpect were both written by Don Libes, NIST.
    #
    # Note that autoexpect does not guarantee a working script. It
    # necessarily has to guess about certain things. Two reasons a script
    # might fail are:
    #
    # 1) timing - A surprising number of programs (rn, ksh, zsh, telnet,
    # etc.) and devices discard or ignore keystrokes that arrive "too
    # quickly" after prompts. If you find your new script hanging up at
    # one spot, try adding a short sleep just before the previous send.
    # Setting "force_conservative" to 1 (see below) makes Expect do this
    # automatically - pausing briefly before sending each character. This
    # pacifies every program I know of. The -c flag makes the script do
    # this in the first place. The -C flag allows you to define a
    # character to toggle this mode off and on.

    set force_conservative 0 ;# set to 1 to force conservative mode even if
    ;# script wasn't run conservatively originally
    if {$force_conservative} {
    set send_slow {1 .1}
    proc send {ignore arg} {
    sleep .1
    exp_send -s -- $arg
    }
    }

    #
    # 2) differing output - Some programs produce different output each time
    # they run. The "date" command is an obvious example. Another is
    # ftp, if it produces throughput statistics at the end of a file
    # transfer. If this causes a problem, delete these patterns or replace
    # them with wildcards. An alternative is to use the -p flag (for
    # "prompt") which makes Expect only look for the last line of output
    # (i.e., the prompt). The -P flag allows you to define a character to
    # toggle this mode off and on.
    #
    # Read the man page for more info.
    #
    # -Don

    set timeout -1
    spawn xrgsu_cracked
    match_max 100000
    expect -exact "Please input your user name:"
    send -- "myusername\r"
    expect -exact "Please input your password:"
    send -- "mypassword\r"
    expect -exact "Use DHCP,1-Use,0-UnUse(Default: 0):"
    send -- "\r"
    expect -exact "Please select which NIC will be used(0-1,Default:0)"
    send -- "\r"
    expect -exact "Use default auth parameter,0-Use 1-UnUse(Default: 0):"
    send -- "\r"
    expect -exact "Please input 'unauth' to LogOff:"
    send -- "unauth\r"
    expect eof


    记得要把倒数第二句 send -- "unauth\r" 删了(除非你想连上网就断开)

    ok,终于录制完了,那怎么执行呢,千万别用sh xrgsu.exp偶就犯了这个错误,
    正确的执行命令是./xrgsu.exp~~想想为什么吧

  • 相关阅读:
    Spring启动流程
    bash脚本
    初识RPC框架
    C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别
    MacOS安装vs code并且配置C/C++环境2020
    numpy 数组操作
    numpy索引 切片和迭代
    numpy基础之数据类型
    numpy基础
    Bootstrap Navbar应用及源码解析
  • 原文地址:https://www.cnblogs.com/dracula/p/1906343.html
Copyright © 2020-2023  润新知