来自shell脚本的端口和fire命令的telnet

时间:2011-12-27 12:34:56

标签: bash

我的要求是在端口和fire命令上telnet的脚本 我可以从bash模式手动执行此操作 首先我点火命令“telnet 0 3300”
然后我得到提示“输入命令:”
那么我输入“登录:sogadm:sogadm;” 所以现在我已登录该端口。
在此之后我再次得到提示“输入命令:” 所以我现在可以解雇我的特定命令。

下面我展示了日志,它是如何进行的:


bash-3.00#telnet 0 3300
尝试0.0.0.0 ...
连接到0.
逃脱角色是'^]' 连接到CAI ......

PROCESS cai3300 CONNECTED ...

输入命令:登录:sogadm:sogadm;
RESP:0;
输入命令:SET:AIRSUB:MSISDN,551100116:ACTIONTYPE,REFILL:REFILLPROFILEID,1:TRANSACTIONAMOUNT,500000:TRANSACTIONCURRENCY,DZD;
RESP:17200;
输入命令:


所以我希望我的剧本能做到这一切 请帮忙。
提前致谢

4 个答案:

答案 0 :(得分:1)

我建议查看期望并自动查看。 Expect旨在控制交互式程序,例如您拥有的程序(提示输入密码,期望命令......)。 Autoexpect是一个脚本,可以从示例会话中生成相应的期望脚本。

运行类似:

autoexpect telnet 0 3300

完成后,生成的脚本将在script.exp

这可以通过以下行集成到您的脚本中:    期待script.exp

script.exp它的注释的大部分内容,您可以删除它们并在bash脚本中复制脚本并运行如下:

echo 'set timeout -1
spawn telnet 0 3300
expect "Enter command:"
send -- "LOGIN:sogadm:sogadm;"
expect "Enter command:"
send -- "SET:AIRSUB:MSISDN,551100116:ACTIONTYPE,REFILL:REFILLPROFILEID,1:TRANSACTIONAMOUNT,500000:TRANSACTIONCURRENCY,DZD;"' | expect

请注意,以上只是一个示例,您应该阅读文档并适应您的需求。

或者,您可以切换到perl并使用Net :: Telnet(如果您对它更熟悉,我确信Python有类似的东西)

答案 1 :(得分:0)

你想要look up "here" documents。像

这样的东西
telnet 0 3300 << EndOfTelnet
sogadm:sogadm;
0;
SET:AIRSUB:MSISDN,551100116:ACTIONTYPE,REFILL:REFILLPROFILEID,1:TRANSACTIONAMOUNT,500000:TRANSACTIONCURRENCY,DZD;
EndOfTelnet

应该做你要问的事。关于在脚本等中包含密码的标准警告

答案 2 :(得分:-1)

ssh,如果你可以使用它,可以让你的生活更轻松 你可以做“ssh -luser命令”。它会提示输入密码,因此你必须提供一个密码 有一些方法可以避免给它密码。 this link解释了一种方式。

答案 3 :(得分:-1)

您可以使用nc(netcat)命令:

cat command_list | nc 0 3300

其中command_list是一个包含要输入的命令列表的文件,每行一个。

请注意,这不会导致错误;即,密码已经改变等。它是一次性按顺序发送每一行输入。