为Telnet会话创建脚本?

时间:2009-04-02 13:52:09

标签: scripting telnet

有没有人知道一种简单的方法来创建一个可以连接到telnet服务器的脚本,做一些常用的telnet,然后注销?我正在处理不熟悉telnet的用户以及他们需要运行的命令。我想要的只是让他们双击一个脚本,然后让该脚本自动为它们执行命令。

你可能想知道,“用户使用什么平台?”它们将在Windows和Linux上运行。可以接受Perl,Java或Python等语言的实现。我看到Perl有一个Net :: Telnet模块。有人用过吗?

我理想的解决方案是创建两个脚本文件。用于Windows的BAT文件和用于Linux的shell脚本。虽然这会使双重维护成为一个问题,但这意味着我不必在每台机器上安装Perl / Java / Python /等等。不幸的是,我还没有看到任何方法来自动化使用批处理文件或shell脚本的telnet会话。

感谢。

12 个答案:

答案 0 :(得分:36)

我已经使用各种方法在unix下编写telnet会话脚本,但最简单的方法可能是一系列echo和sleep命令,其输出通过管道传输到telnet。将输出管道输入另一个命令也是可能的。

愚蠢的例子

(echo password; echo "show ip route"; sleep 1; echo "quit" ) | telnet myrouter

这(basicallly)检索Cisco路由器的路由表。

答案 1 :(得分:13)

Expect是为此而构建的,可以处理输入/输出和超时等。请注意,如果您不是TCL风扇,则可以使用Perl / Python / Java的Expect模块。

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

答案 2 :(得分:12)

另一种方法是使用与vatine显示的格式相同的netcat(或nc,取决于哪个posix),或者你可以创建一个包含每个命令的文本文件。

我发现有些posix'telnet没有正确处理重定向(这就是为什么我建议使用netcat)

答案 3 :(得分:7)

此vbs脚本重新加载cisco开关,确保在Windows上安装telnet。

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

答案 4 :(得分:3)

检查SendCommand tool

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

perl sendcommand.pl -i login.txt -t cisco -c "show ip route"

答案 5 :(得分:3)

这可能不是一个好主意,但我使用java并使用简单的TCP / IP套接字编程连接到telnet服务器并交换通信。如果您知道实现的协议,它将完美地工作。对于SSH等,除非你知道如何进行握手等,否则它可能会很难,但简单的telnet就像是一种享受。

我尝试的另一种方法是在java System.exec()等中使用外部进程,然后让telnet中构建的窗口为您完成工作,您只需向本地系统进程发送和接收数据。

答案 6 :(得分:3)

import telnetlib

user = "admin"
password = "\r"

def connect(A):
    tnA = telnetlib.Telnet(A)
    tnA.read_until('username: ', 3)
    tnA.write(user + '\n')
    tnA.read_until('password: ', 3)
    tnA.write(password + '\n')
    return tnA
def quit_telnet(tn)
    tn.write("bye\n")
    tn.write("quit\n")

答案 7 :(得分:0)

几个问题:

  1. 你能把东西放在你要远程登录的设备上吗?
  2. 脚本执行的命令是相同的还是因机器/用户而异?
  3. 您是否希望点击图标的人必须提供用户ID和/或密码?
  4. 也就是说,我前段时间写了一些Java,与几个可能对您有用的IP电源板(BayTech RPC3s)进行通信。如果你有兴趣,我会看看我是否可以把它挖出来并贴在某个地方。

答案 8 :(得分:0)

我喜欢Active State使用python给出的示例。这是完整的link。我在链接中添加了简单的登录部分,但您可以了解您可以做的事情。

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()

答案 9 :(得分:0)

Bash shell支持这种开箱即用的功能,例如

exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}

要过滤并仅显示一些行,请运行:grep Example <&${stream}

答案 10 :(得分:-2)

虽然与你的问题没有直接关系,但我建议你改用ssh,因为你可以通过它执行特定的命令(默认情况下它更安全)。

答案 11 :(得分:-2)

将telnet会话写入BAT Dos文件并执行。