遇到好几个网友说起无法实现 telnet,于是就简单写了这么个库。
没有考虑太多规则,主要是处理了一下获取执行结果的延时问题。
旨在抛砖引玉,希望有网友做出更完善的库来,分享给大家使用。
库下载:
解压缩到 /lib/godking/ 目录下,引用方式:
import godking.telnet
示例:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add()
/*}}*/
winform.show();
import console;
import godking.telnet
var c = godking.telnet("192.168.100.254")
console.log("============================")
var r,v = c.waitInclude("Login")
console.log("等待输入密码提示:",r,v)
console.log("============================")
if r c.sendn("12345678")
console.log("已输入密码登录,执行结果:",c.get())
console.log("============================")
c.sendn("dis this")
console.log("dis this,执行结果:",c.get())
console.log("============================")
c.sendn("dis ?")
console.log("dis ?,执行结果:",'\n',c.get())
console.log("============================")
c.send(' ')
console.log("空格,执行结果:",'\n',c.get())
console.log("============================")
c.send('0')
console.log("退出dis,执行结果:",'\n',c.get())
console.log("============================")
c.sendn('\8\8\8\8quit')
console.log("quit,执行结果:",c.get())
win.loopMessage();
执行结果:
如果出现 more,想要继续操作,方法如下:
send(' ') 继续显示一屏,send('\n') 继续显示一行,send('0') 退出more。
以下是关于telnet协议部分数据解析,仅供参考:
/*****
接收数据:
'\xFF\xFD\x18' // Do Terminal Type("终端类型")
'\xFF\xFD\x20' //Do Terminal Speed("终端速率")
'\xFF\xFB\x03' //Will Suppress Go Ahead("抑制继续进行")
'\xFF\xFD\x01' //Do Echo("回显")
'\xFF\xFD\x1F' //Do Negotiate About Window Size("窗口大小")
'\xFF\xFB\x05' //Will Status("同意状态")
'\xFF\xFA\x18\x01' //Suboption Terminal Type
'\xFF\xF0' //Suboption End
发送数据:
'\xFF\xFD\x18' //Will Terminal Type
'\xFF\xFB\x1F' //Will Negotiate About Window Size
'\xFF\xFC\x20' //Won't Terminal Speed
'\xFF\xFD\x03' //Do Suppress Go Ahead
'\xFF\xFB\x01' //Will Echo
'\xFF\xFA\x1F\x00\x78\x00\x1D' //Suboption Negotiate About Window Size
'\xFF\xF0' //Suboption End
'\xFF\xFE\x05' //Don't Status
*****/