node-telnet-client, node.js的简单telnet客户端

分享于 

12分钟阅读

GitHub

  繁體 雙語
A simple telnet client for node.js
  • 源代码名称:node-telnet-client
  • 源代码网址:http://www.github.com/mkozjak/node-telnet-client
  • node-telnet-client源代码文档
  • node-telnet-client源代码下载
  • Git URL:
    git://www.github.com/mkozjak/node-telnet-client.git
    Git Clone代码到本地:
    git clone http://www.github.com/mkozjak/node-telnet-client
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mkozjak/node-telnet-client
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    GitHub licenseBuild StatusCoverage Status
    npmDonate Bitcoin/Altcoins
    NPM

    node-telnet-client

    node.js的简单telnet客户端

    安装

    在项目或者全球范围内:

    
    npm install telnet-client
    
    
    npm install -g telnet-client
    
    
    
    

    责任披露

    因为版本1. x, 从使用 new Buffer 转移到 Buffer.from,因为当库使用最新的node.js 时,它发出一个不推荐使用的警告警告。 另外,由于版本 0.12. x,,我们已经移动到 ECMAScript 6以利用类和作用域特性。

    这意味着我们已经完全转移到当前和它的node.js 版本。 如果有问题,请检查是否打开,如果没有打开,我们可以打开并尝试解决问题。

    用法示例

    异步/等待( node.js> = 7.6.0 )

    'use strict'constTelnet=require('telnet-client')asyncfunctionrun() {
     let connection =newTelnet()
     let params = {
     host:'127.0.0.1',
     port:23,
     shellPrompt:'/# ',
     timeout:1500 }
     awaitconnection.connect(params)
     let res =awaitconnection.exec('uptime')
     console.log('async result:', res)
    }run()

    回调样式

    var Telnet =require('telnet-client')var connection =newTelnet()var params = {
     host:'127.0.0.1',
     port:23,
     shellPrompt:'/# ',
     timeout:1500,
     // removeEcho: 4}connection.on('ready', function(prompt) {
     connection.exec(cmd, function(err, response) {
     console.log(response)
     })
    })connection.on('timeout', function() {
     console.log('socket timeout!')
     connection.end()
    })connection.on('close', function() {
     console.log('connection closed')
    })connection.connect(params)

    承诺

    var Telnet =require('telnet-client')var connection =newTelnet()var params = {
     host:'127.0.0.1',
     port:23,
     shellPrompt:'/# ',
     timeout:1500,
     // removeEcho: 4}connection.connect(params)
    .then(function(prompt) {
     connection.exec(cmd)
    . then(function(res) {
     console.log('promises result:', res)
     })
    }, function(error) {
     console.log('promises reject:', error)
    })

    生成器

    var co =require('co')var bluebird =require('bluebird')var Telnet =require('telnet-client')var connection =newTelnet()var params = {
     host:'127.0.0.1',
     port:23,
     shellPrompt:'/# ',
     timeout:1500,
     // removeEcho: 4}// using 'co'co(function*() {
     yieldconnection.connect(params)
     let res =yieldconnection.exec(cmd)
     console.log('coroutine result:', res)
    })// using 'bluebird'bluebird.coroutine(function*() {
     yieldconnection.connect(params)
     let res =yieldconnection.exec(cmd)
     console.log('coroutine result:', res)
    })()

    异步/等待( 使用 babeljs )

    'use strict'constPromise=require('bluebird')consttelnet=require('telnet-client')require('babel-runtime/core-js/promise').default=PromisePromise.onPossiblyUnhandledRejection(function(error) {
     throw error
    })// also requires additional babeljs setupasyncfunctionrun() {
     let connection =newTelnet()
     let params = {
     host:'127.0.0.1',
     port:23,
     shellPrompt:'/# ',
     timeout:1500 }
     awaitconnection.connect(params)
     let res =awaitconnection.exec(cmd)
     console.log('async result:', res)
    }run()

    API

    var Telnet =require('telnet-client')var connection =newTelnet()

    connection.connect(options) -> 承诺

    创建到指定主机的新TCP连接,其中'选项'是一个可以包含下列属性的对象:

    • host: 主机应该连接到。 默认为'127.0.0.1'。
    • port: 客户端应该连接到的端口。 默认为'23'。
    • timeout: 将套接字设置为在套接字上的指定毫秒数不活动后超时。
    • shellPrompt: shell 提示主机使用。 可以是字符串或者RegExp的实例。 默认为 正规表达式'/(?:/)#s/"。
    • loginPrompt: 主机使用的用户名/登录提示。 可以是字符串或者RegExp的实例。 默认为 正规表达式'/login[: ] *$/i'。
    • passwordPrompt: 主机使用的密码/登录提示。 可以是字符串或者RegExp的实例。 默认为 正规表达式/密码:/i'.
    • failedLoginMatch: 如果你的主机提供登录失败消息,则要匹配的字符串或者 正规表达式。 默认为未定义。
    • initialLFCR: 用于确定在连接到服务器时是否应发送初始'rn'( CR+LF )的标志。
    • username: 用户名用于登录。 默认为'root'。
    • password: 用于登录的密码。 默认为'来宾'。
    • sock: 可以用于连接跳/复用的双工流。
    • irs: 输入记录分隔符用于区分响应行的分隔符。 默认为'rn'。
    • ors: 输出记录分隔符用于执行命令( 输入时中断行)的分隔符。 默认为'n'。
    • echoLines: 用于截断响应的行数。 默认为 1.
    • stripShellPrompt: 是否应从结果中排除 shell 提示。 默认为 true。
    • pageSeparator: Pattern 使用( 并从最终输出中删除) 来中断输出中的行数。 默认为'----更多'。
    • negotiationMandatory: 如果需要,禁用telnet协商。 不需要telnet规范时,可以与'发送'一起使用。 Telnet客户端基本上就像一个简单的TCP客户端。 默认为 true。
    • execTimeout: 使用'执行'方法时等待服务器回复的超时。 默认值为 2000 ( ms )。
    • sendTimeout: 使用'发送'方法时等待服务器回复的超时。 默认值为 2000 ( ms )。
    • maxBufferLength: 以响应数据填充的最大缓冲区长度,以字节为单位。 默认值为 1 M。
    • debug: 启用/禁用控制台上的调试日志。 默认为 false。

    在连接就绪后解析( 与 ready 事件类似)。

    connection.exec(data, [options], [callback] ) -> 承诺

    在套接字( 应该是一个兼容的远程命令主机如果需要理智的信息) 上发送数据。 当最终写出命令并接收到响应数据时,可选回调参数会被错误和响应执行。
    如果在执行命令时没有错误,那么'错误'作为回调的第一个参数将是未定义的。 命令结果将作为第二个参数传递给回调。

    *** 重要通知/api从 0.3.0 *** 更改
    现在使用签名( 错误,[response] ) 调用回调参数

    选项:

    • shellPrompt: shell 提示主机使用。 可以是字符串或者RegExp的实例。 默认为 正规表达式'/(?:/)#s/"。
    • loginPrompt: 主机使用的用户名/登录提示。 可以是字符串或者RegExp的实例。 默认为 正规表达式'/login[: ] *$/i'。
    • failedLoginMatch: 如果你的主机提供登录失败消息,则要匹配的字符串或者 正规表达式。 默认为未定义。
    • timeout: 将套接字设置为在套接字上的指定毫秒数不活动后超时。
    • execTimeout: 用于在使用这里方法时等待服务器回复的超时。 默认为'未定义'。
    • maxBufferLength: 以响应数据填充的最大缓冲区长度,以字节为单位。 默认值为 1 M。
    • irs: 输入记录分隔符用于区分响应行的分隔符。 默认为'rn'。
    • ors: 输出记录分隔符用于执行命令( 输入时中断行)的分隔符。 默认为'n'。
    • echoLines: 用于截断响应的行数。 默认为 1.

    connection.send(data, [options], [callback] ) -> 承诺

    在不需要telnet协商的情况下在插座上发送数据。

    选项:

    • ors: 输出记录分隔符用于执行命令( 输入时中断行)的分隔符。 默认为'n'。
    • waitfor: 在返回响应之前等待给定的字符串。 如果未定义,将使用超时值。
    • timeout: 使用'发送'方法时等待服务器回复的超时。 默认值为 2000 ( ms ) 或者 sendTimeout ('连接'鏂规碜) 如果设置。
    • maxBufferLength: 以响应数据填充的最大缓冲区长度,以字节为单位。 默认值为 1 M。

    connection.shell(callback) -> 承诺

    启动交互式 shell 会话。 返回可以用于读取和写入数据的双工流。

    connection.getSocket() -> net.Socket

    返回可以用于连接跳转的双工流。 查看'短袜'选项。

    connection.end() -> 承诺

    一半关闭套接字 换句话说,它发送一个FIN数据包。 有可能服务器仍然会发送一些数据。

    connection.destroy() -> 承诺

    确保这里插槽上没有更多的I/O 活动。 只有在出现错误时才需要( 解析错误或者)。

    事件:'连接"'

    成功建立套接字连接时发出。

    事件:'就绪"'

    成功建立套接字连接并成功连接到指定的远程主机时发出。 提示值作为回调的第一个参数传递给回调。

    事件:'writedone"'

    将给定数据的写入发送到套接字时发出。

    事件:'数据"'

    这是来自核心'网网'库的转发'数据'事件。 触发此事件时接收 <buffer>

    事件:'超时"'

    如果套接字超时,则发出。 这只是为了通知套接字已经空闲。 用户必须手动关闭连接。

    事件:'failedlogin"'

    提供 failedLoginMatch Pattern 并从主机找到匹配项时发出。 在这里事件之后直接调用'destroy()'方法。

    事件:'错误"'

    发生错误时发出。 将在此事件之后直接调用'关闭'事件。

    事件:'''

    当套接字的另一端发送FIN数据包时发出。

    事件:'close'

    套接字完全关闭后发出。

    许可证

    捐赠

    如果你喜欢这个项目,考虑捐赠。


    TEL  Telnet