有没有熟悉expect的大侠...

sh/bash/dash/ksh/zsh等Shell脚本
回复
qq1100970
帖子: 7
注册时间: 2010-11-23 20:15

有没有熟悉expect的大侠...

#1

帖子 qq1100970 » 2010-11-23 20:19

程序运行后,自动登陆127.0.0.1系统,成功后屏幕输出“Hello!this is ***”。
接着向某个网站发送Ping包,满足:发送时间从键盘输入,数据包长度从键盘输入,ping的目的地址由键盘输入;
要有出错处理!如输入的时间、数据包长度,目的地址正确性检查。

那个我连第一个的脚本都没写好,没错误,但是显示不了那句话... :em20 ,求解啊
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 有没有熟悉expect的大侠...

#2

帖子 eexpress » 2010-11-24 10:21

#!/usr/local/bin/expect
set f [open ur_ip_passwd_file r]
set timeout 150
while {[gets $f line] >= 0} {
spawn ssh [lindex $line 0]
expect "user: "
sleep .1
send "root\r"
expect "assword: "
send "[lindex $line 0]\r"
expect -re {[$#] }
send "shutdown\r"
expect eof
close
}
close $f
● 鸣学
qq1100970
帖子: 7
注册时间: 2010-11-23 20:15

Re:eexpress

#3

帖子 qq1100970 » 2010-11-24 18:38

2l,那个我不打算用ssh,那个比较喜欢用telnet,虽然没啥安全性。。。 :em06
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 有没有熟悉expect的大侠...

#4

帖子 eexpress » 2010-11-25 9:18

自己看man
基本就是expect,然后send嘛。
● 鸣学
qq1100970
帖子: 7
注册时间: 2010-11-23 20:15

Re:eexpress

#5

帖子 qq1100970 » 2010-11-25 11:03

那个telnet代码写好了,但是自动登录后,后续代码就不会被执行。。。。 :em20
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 有没有熟悉expect的大侠...

#6

帖子 chengmoYS » 2010-11-25 18:18

qq1100970 写了:程序运行后,自动登陆127.0.0.1系统,成功后屏幕输出“Hello!this is ***”。
接着向某个网站发送Ping包,满足:发送时间从键盘输入,数据包长度从键盘输入,ping的目的地址由键盘输入;
要有出错处理!如输入的时间、数据包长度,目的地址正确性检查。

那个我连第一个的脚本都没写好,没错误,但是显示不了那句话... :em20 ,求解啊
这个我可以帮你写。加我qq 21409199。或者msn [email protected]
chengmoYS
帖子: 125
注册时间: 2007-10-22 22:40

Re: 有没有熟悉expect的大侠...

#7

帖子 chengmoYS » 2010-11-25 22:55

程序运行后,你这里是指的所写的expect脚本吗?
另外,自动登录到127.0.0.1系统,我们都知道127.0.0.1即localhost,代表本机的地址,你这里是指本机吗?

再看你的向某个网站的网址发送数据包,即ping这个网站的ip地址,你要求指定3个。第一个是发送时间,你这里的发送时间,是自己指点几点发送数据包吗(是例行性执行,还是偶然性执行,这个牵涉到任务管理)。数据包的长度,和目的地址比较好指定。第二个数据包长度通过ping的-s来指定,这个好解决。第三个通过ping来指定,好解决。

你这里又写到要验证这3个的正确性。 发送时间要符合时间的规范。数据包长度为非负。地址无论是数字形式或者域名形式都必须符合规范。都可以用正则表达式解决。
qq1100970
帖子: 7
注册时间: 2010-11-23 20:15

Re: 有没有熟悉expect的大侠...

#8

帖子 qq1100970 » 2010-11-26 18:25

chengmoYS 写了:程序运行后,你这里是指的所写的expect脚本吗?
另外,自动登录到127.0.0.1系统,我们都知道127.0.0.1即localhost,代表本机的地址,你这里是指本机吗?

再看你的向某个网站的网址发送数据包,即ping这个网站的ip地址,你要求指定3个。第一个是发送时间,你这里的发送时间,是自己指点几点发送数据包吗(是例行性执行,还是偶然性执行,这个牵涉到任务管理)。数据包的长度,和目的地址比较好指定。第二个数据包长度通过ping的-s来指定,这个好解决。第三个通过ping来指定,好解决。

你这里又写到要验证这3个的正确性。 发送时间要符合时间的规范。数据包长度为非负。地址无论是数字形式或者域名形式都必须符合规范。都可以用正则表达式解决。
现在的问题是,可以登录主机了,但是登录后不会自动执行后续的程序。。。头疼的紧。。。
qq1100970
帖子: 7
注册时间: 2010-11-23 20:15

Re: 有没有熟悉expect的大侠...

#9

帖子 qq1100970 » 2010-11-26 21:52

就差个字符串匹配了
MaskRay
帖子: 61
注册时间: 2010-04-29 22:00
系统: Gentoo Linux ~amd64
联系:

Re: 有没有熟悉expect的大侠...

#10

帖子 MaskRay » 2011-01-02 21:55

#!/usr/bin/expect --

expect_after -re "\n" exp_continue timeout {exit 1}

send_user "timeout: "
expect_user {
-re "(\\d+)\n" {
set to $expect_out(1,string)
}
}
send_user "packetsize: "
expect_user {
-re "(\\d+)\n" {
set packetsize $expect_out(1,string)
}
}
send_user "destination: "
expect_user {
-re "\\d+\\.\\d+\\.\\d+\\.\\d+\n" {
set ip [split [string trimright $expect_out(0,string) \n] .]
for {set i 0} {$i < 4} {incr i} {
if {[lindex $ip $i] < 0 || [lindex $ip $i] >= 256} exp_continue
}
}
}
send_user "ping -W $to -s $packetsize [join $ip .]\n"
exec ping -W $to -s $packetsize [join $ip .]
回复