有没有人知道一种简单的方法来创建一个可以连接到telnet服务器的脚本,做一些常用的telnet,然后注销?我正在处理不熟悉telnet的用户以及他们需要运行的命令。我想要的只是让他们双击一个脚本,然后让该脚本自动为它们执行命令。
你可能想知道,“用户使用什么平台?”它们将在Windows和Linux上运行。可以接受Perl,Java或Python等语言的实现。我看到Perl有一个Net :: Telnet模块。有人用过吗?
我理想的解决方案是创建两个脚本文件。用于Windows的BAT文件和用于Linux的shell脚本。虽然这会使双重维护成为一个问题,但这意味着我不必在每台机器上安装Perl / Java / Python /等等。不幸的是,我还没有看到任何方法来自动化使用批处理文件或shell脚本的telnet会话。
感谢。
答案 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)
答案 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)
几个问题:
也就是说,我前段时间写了一些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文件并执行。