Scripting 为Telnet会话创建脚本?

Scripting 为Telnet会话创建脚本?,scripting,telnet,Scripting,Telnet,有人知道一种简单的方法来创建一个脚本,它可以连接到telnet服务器,执行一些常见的telnet操作,然后注销吗?我所面对的用户不熟悉telnet以及他们需要运行的命令。我只想让他们双击一个脚本,并让该脚本自动为他们执行命令 您可能想知道,“用户在什么平台上?”他们将同时在Windows和Linux上。可以使用Perl、Java或Python等语言实现。我看到Perl有一个Net::Telnet模块。有人用过吗 我的理想解决方案是创建两个脚本文件。windows的BAT文件和Linux的shel

有人知道一种简单的方法来创建一个脚本,它可以连接到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模块


编辑:上面的页面表明条目是一个有用的资源:-)

我在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的原因)

几个问题:

  • 你能把东西放在你要远程上网的设备上吗
  • 脚本执行的命令是相同的还是因计算机/用户而异
  • 您是否希望单击图标的人必须提供用户ID和/或密码
  • 这就是说,我不久前编写了一些Java,与两个可能对您有用的支持IP的电源板(BayTech RPC3s)进行对话。如果你感兴趣的话,我会看看是否可以把它挖出来,然后贴到某个地方。

    检查一下

    您可以按如下方式使用它:

    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}