日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/4/14 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Expect 在网络管理中发挥着重要作用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接

廢話 可忽略


?

接觸Expect是迫不得已。系統(tǒng)管理員在工作中經(jīng)常會(huì)遇到這樣的問題,需要實(shí)現(xiàn)一個(gè)自動(dòng)交互的工具,這個(gè)工具可以自動(dòng)Telnet或者Ftp到指定的服務(wù)器上,成功login之后自動(dòng)執(zhí)行一些命令來(lái)完成所需的工作。

  當(dāng)然,有很多編程語(yǔ)言可以去解決此類問題,比如用C、Perl、或者Expect。

  顯然,盡管C是無(wú)所不能的,但是解決此類問題還是比較困難,除非你熟悉Telnet或者Ftp協(xié)議。

  曾經(jīng)見過別人用C實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的Telnet客戶端協(xié)議的程序,可以在這個(gè)程序加入自己的代碼來(lái)捕獲服務(wù)端的輸出,根據(jù)這些輸出來(lái)發(fā)送適當(dāng)?shù)闹噶顏?lái)進(jìn)行遠(yuǎn)程控制。

  使用Perl一樣可以實(shí)現(xiàn)這樣的功能,然而,Expect做的更出色,而且除支持Unix/Linux平臺(tái)外,它還支持Windows平臺(tái),它就是為系統(tǒng)管理和軟件測(cè)試方面的自動(dòng)交互類需求而產(chǎn)生的


介紹Expect的時(shí)候,不得不說到TCL,畢竟這個(gè)語(yǔ)言是用TCL寫的,于是,其中除了部分的自有命令外,語(yǔ)法也都是TCL的語(yǔ)法,所以在Expect教程里面,將會(huì)重點(diǎn)通過一些程序來(lái)介紹Expect的功能。

先看一個(gè)最簡(jiǎn)單的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”

對(duì)于Expect程序,是可以以tcl后綴名結(jié)尾的,上一個(gè)程序的名字為testTelnet.tcl,且執(zhí)行方法和tcl也一致,直接./testTelnet.tcl即可,但是注意文件的第一行,在TCL程序中,第一行的內(nèi)容為

#!/usr/bin/tclsh

而在這里變?yōu)榱?/p>

#!/usr/bin/expect

?

這個(gè)程序的作用如下,

1.?????????建立一個(gè)到10.80.1.23的telnet連接,由spawn telnet 10.32.17.10來(lái)完成,

2.?????????等待屏幕打印login,由expect “l(fā)ogin:”來(lái)實(shí)現(xiàn)

3.?????????然后發(fā)送用戶名user,由send “user\r”來(lái)完成,其中\(zhòng)r表示在輸入user后按下回車鍵

4.?????????等待屏幕打印Password:,由expect “Password”來(lái)實(shí)現(xiàn)

5.?????????發(fā)送密碼123456,同第3步

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

7.?????????輸出登錄成功消息

這是自動(dòng)通過telnet登錄的程序,基本上程序中的每句話都被解釋過了,唯一剩下的就是set timeout 10是什么意思呢?

我們可以看到,上面expect都是用來(lái)等待某個(gè)結(jié)果出來(lái)的,如果這個(gè)結(jié)果一直不出來(lái)怎么辦?難道程序一直等下去么?當(dāng)然不是,所以這里就有了timeout,也就是程序如果在等待10s種后沒有得到期望結(jié)果,將會(huì)自動(dòng)退出。如果不設(shè)置timeout的話,expect默認(rèn)的時(shí)間是20s。

而至于spawn,send,expect,這些都是內(nèi)置的expect命令,其中spawn專門用來(lái)建立網(wǎng)絡(luò)連接的時(shí)候用的,記住就可以了。

在這里,需要提示的是在使用expect命令等待內(nèi)容的時(shí)候,后面的內(nèi)容一定要是屏幕輸出的最后內(nèi)容。比如上述程序中等到了“l(fā)ogin”,“%”等,都是屏幕輸出的最后,至于為什么,將在以后描述。

?

轉(zhuǎn)載于:https://www.cnblogs.com/wangkangluo1/archive/2012/06/13/2548655.html

總結(jié)

以上是生活随笔為你收集整理的Expect 在网络管理中发挥着重要作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。