Scripting 为Telnet会话创建脚本?
有人知道一种简单的方法来创建一个脚本,它可以连接到telnet服务器,执行一些常见的telnet操作,然后注销吗?我所面对的用户不熟悉telnet以及他们需要运行的命令。我只想让他们双击一个脚本,并让该脚本自动为他们执行命令 您可能想知道,“用户在什么平台上?”他们将同时在Windows和Linux上。可以使用Perl、Java或Python等语言实现。我看到Perl有一个Net::Telnet模块。有人用过吗 我的理想解决方案是创建两个脚本文件。windows的BAT文件和Linux的shell脚本。虽然这会使双重维护成为一个问题,但这意味着我不必安装Perl/Java/Python/etc。。。在每台机器上。不幸的是,我还没有看到任何方法可以使用批处理文件或shell脚本来自动化telnet会话 谢谢。就是为此而构建的,可以处理输入/输出加超时等。请注意,如果您不是TCL迷,那么还有Perl/Python/Java的Expect模块Scripting 为Telnet会话创建脚本?,scripting,telnet,Scripting,Telnet,有人知道一种简单的方法来创建一个脚本,它可以连接到telnet服务器,执行一些常见的telnet操作,然后注销吗?我所面对的用户不熟悉telnet以及他们需要运行的命令。我只想让他们双击一个脚本,并让该脚本自动为他们执行命令 您可能想知道,“用户在什么平台上?”他们将同时在Windows和Linux上。可以使用Perl、Java或Python等语言实现。我看到Perl有一个Net::Telnet模块。有人用过吗 我的理想解决方案是创建两个脚本文件。windows的BAT文件和Linux的shel
编辑:上面的页面表明条目是一个有用的资源:-)我在unix下使用了各种方法编写telnet会话脚本,但最简单的方法可能是一系列echo和sleep命令,它们的输出通过管道传输到telnet。也可以将输出管道化到另一个命令中 愚蠢的例子 (echo password; echo "show ip route"; sleep 1; echo "quit" ) | telnet myrouter (回显密码;回显“显示ip路由”;休眠1;回显“退出”)| telnet myrouter
这(基本上)检索Cisco路由器的路由表。另一种方法是使用与vatine显示的格式相同的netcat(或nc,取决于posix),或者您可以创建一个文本文件,其中包含自己行中的每个命令 我发现一些posix的Telnet无法正确处理重定向(这就是我建议netcat的原因)几个问题:
perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
这听起来可能不是一个好主意,但我使用java和简单的TCP/IP套接字编程来连接到telnet服务器和交换通信。如果您知道所实现的协议,它将非常有效。对于SSH等,这可能很难,除非你知道如何进行握手等,但简单的telnet就像是一种享受
我尝试的另一种方法是,在java System.exec()等中使用外部进程,然后让windows内置的telnet为您完成任务,您只需向本地系统进程发送和接收数据。此vbs脚本重新加载cisco交换机,确保telnet安装在windows上
Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "telnet"
WScript.Sleep 1000
oShell.Sendkeys "open 172.25.15.9~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "en~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "reload~"
WScript.Sleep 1000
oShell.Sendkeys "~"
Wscript.Quit
将telnet会话写入BAT Dos文件并执行。我喜欢使用python的Active State给出的示例。这是全文。我从链接中添加了简单的登录部分,但是你可以得到你可以做什么的要点
import telnetlib
prdLogBox='142.178.1.3'
uid = 'uid'
pwd = 'yourpassword'
tn = telnetlib.Telnet(prdLogBox)
tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password:")
tn.write(pwd + "\n")
tn.write("exit\n")
tn.close()
bashshell支持这种开箱即用的方法,例如
exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}
exec{stream}/dev/tcp/example.com/80
printf“GET/HTTP/1.1\nHost:example.com\n连接:close\n\n”>&${stream}
如果您不想学习TCL,cat Expect实现也可以在其他语言中使用,如Perl的Expect.pm模块。Expect发行版包括一个名为autoexpect的脚本,该脚本将通过查看会话生成Expect脚本。生成的脚本非常简单,可以进行调整。TCL/TK对于使用它编写工具来说太糟糕了——原因很简单,因为在嵌入式系统上无法完全满足依赖关系。。。忘掉所有的废话,只使用netcat=几乎没有CPU负载。Expect仅适用于Linux/Unix。Windows不受支持。回答很好,telnet不起作用,但通过nc传输它却起作用了。来吧,各位,当你们否决投票时,告诉我为什么(特别是在事实发生多年后),你们的答案可能只是梵蒂娜回答中的一条评论。或是编辑他的作品。当你提到“与梵蒂冈展览相同的形式”时,没有必要发布一个全新的答案。因此,得到最好的答案比有很多答案相互参照要好,至少我相信是这样。顺便说一句,我没有否决。请使用python telnetlib模块。例如,无法从批处理文件中控制/编写FTP会话脚本,只能开始FTP会话。要编写FTP会话脚本,必须使用脚本命令-s:filename.txt
来识别包含脚本的文本文件。FTP?我相信问题是关于TELNET会话括号的用途是什么 这里?@WakanTanka强制echos和sleep在一个子shell中运行,共享一个标准输出,并让sleep在“quit”命令被回响之前暂停输出,以便在连接终止之前打印完整的路由表。这是我在Windows上唯一可行的解决方案(在Windows上的Cygwin上尝试了类似Linuxy的解决方案,但没有一个对我有效)
exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}