- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的要求是从 Node js连接到Telnet客户端。
我正在使用 telnet-client包裹
我正在使用此代码进行连接
var Telnet = require('telnet-client')
var connection = new Telnet()
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 params = {
host: '127.0.0.1',
port: 23,
shellPrompt: '/ #',
loginPrompt: 'Username: ',
passwordPrompt: 'Password: ',
username: 'vinit',
password: 'vinit123',
initialLFCR: true,
timeout: 1500,
// removeEcho: 4
}`
但仍然面临同样的问题。在某些链接中,我发现有人说 shellPrompt
值不正确,那么 shellPrompt
的值应该是多少。实际上我对这个话题完全陌生,所以对此不太了解。
任何帮助将不胜感激。提前致谢。
最佳答案
根据您的意见,这不是网络连接问题,这意味着您的连接在登录期间失败,或者之后无法检测到有效提示(然后等待直到超时)。
因此,您应该做的第一件事是添加 failedLogin
回调:
connection.on('failedlogin',function(msg) {
console.log("Login failed !",msg);
});
检测“登录失败”的情况(否则会尝试登录一次,然后挂起直到超时)。
接下来,“手动”连接到您的服务器,即从命令行运行 telnet 127.0.0.1
,然后查看“登录/密码”和“shell”提示的外观.
例如在我的“Ubuntu 16.04.3 LTS”系统上:
%telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Ubuntu 16.04.3 LTS
zeppelin-desktop login: zeppelin
Password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-97-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
zeppelin@zeppelin-desktop:~$
zeppelin-desktop login:
密码:
zeppelin@zeppelin-desktop:~$
登录和密码提示确实匹配它们在 telnet-client 中的预定义模式.
loginPrompt: Username/login prompt that the host is using. Can be a string or an instance of RegExp. Defaults to regex '/login[: ]*$/i'.
passwordPrompt: Password/login prompt that the host is using. Can be a string or an instance of RegExp. Defaults to regex '/Password: /i'.
所以没有必要改变它们。
Shell 提示不匹配预定义模式(/#
):
shellPrompt: Shell prompt that the host is using. Can be a string or an instance of RegExp. Defaults to regex '/(?:/ )?#\s/'.
所以需要修改,例如
shellPrompt: /:~[^$]*\$\s*$/,
你可以用 grep 测试你的 shell 提示模式,就像这样:
%echo 'zeppelin@zeppelin-desktop:~$' | grep -o ':~[^$]*\$\s*$'
:~$
(不匹配输出为空)
现在您已经有了正确的 shell 提示模式,telnet-client
应该能够识别它,并发送 cmd
(在 on(' ready')
handler) 到服务器,以响应它。
例如如果您设置 cmd="date"
,您应该得到当前日期作为响应:
connection.on('ready', function(prompt) {
console.log(">date");
connection.exec("date", function(err, response) {
console.log("<",response)
})
})
%nodejs telnet.js
>date
< Wed Oct 25 10:11:11 UTC 2017
附言
您可能想要设置的另一个选项是“登录失败”模式:
failedLoginMatch : "Login incorrect"
检测服务器拒绝您的密码。
这在我的 Ubuntu 系统上不是绝对必要的,因为它只会在密码失败的情况下重复登录提示,以便 failedlogin
事件无论如何都会被调度,但取决于您的配置,它可能是必需的。
关于node.js - 套接字超时!使用 Node telnet-client 的 Telnet 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46743775/
我一直在尝试创建一个 expect 脚本来通过 telnet 自动登录到我的设备 如果expect 命令没有多种可能性,则脚本可以正常工作,登录设备。 #!/usr/bin/expect set ti
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
据我了解,Telnet 与 HTTP 一样都是一种协议(protocol)。我有这样的想法,在建立初始 TCP 连接后,Telnet 客户端会将一些 telnet 特定代码发送到另一端的服务器(在本例
我正在尝试使用 C++ 和 QT 作为 GUI 来实现 Telnet 客户端。我不知道如何处理 telnet 协商。每个 telnet 命令都以 IAC 开头,例如 IAC WILL SUPPRESS
我需要在 telnet 中进行大量测试。我正在研究一些方法来自动检测我们电子邮件服务器上的字典攻击,然后限制它们,或将它们列入黑名单等。 我现在准备运行一些测试,看看我的工作是否有返回。我想我只需下载
看来您应该能够使用 telnet 手动进行 json-rpc 调用。但是,当我尝试这样做时,服务器根本没有任何响应,我不得不关闭 telnet 客户端。我是否需要发送 header 和/或以某种方式表
看来您应该能够使用 telnet 手动进行 json-rpc 调用。但是,当我尝试这样做时,服务器根本没有任何响应,我不得不关闭 telnet 客户端。我是否需要发送 header 和/或以某种方式表
我正在使用来自 busy-box 的 Telnet 客户端。我需要与 telnet 服务器创建一个 session ,但需要根据特定条件从 C 代码创建 session ,一旦创建 session ,
我需要发出 telnet close 命令,通常,^] (Ctrl-]) 应该可以工作。(找不到任何 emacs 特定的 telnet 文档) 我怎样才能得到 telnet>当我在 emacs 中使用
几天前我买了一个新的 MTS Wi-Fi Dongle,今天在使用它时,我使用我的 Android 设备在 192.168.1.1 上进行了端口扫描,令人惊讶的是端口 23(telnet)是开放的。输
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有一个项目要做,它是这样的: 当您打开一个 telnet 控制台并 telnet 到我的服务器时,PHP 应该响应:“你好,你叫什么名字?” 然后你输入你的名字等等。我怎样才能在 PHP 中做到这一
是否可以通过 telnet 连接到服务器并从那里 telnet 到 python 中的另一台服务器?由于有一个 Controller ,我使用用户名和密码远程登录,并且从 Controller 命令行
我选择了一个用 C 编写 Telnet 服务器和 Telnet 客户端代码的项目。我正在学习 C 编程。 有没有人尝试过这个。请告诉我如何进行以及要引用的 Material 。抱歉询问源代码。我不知道
我需要编写一个在 Windows 上运行的 Perl 脚本,以通过远程登录到 Linux 机器来不断监视 Linux 机器下的日志文件以寻找模式。但问题是,Linux 机器非常频繁地重新启动(通过一些
我是 python 新手,我正在编写一个脚本来在某些情况下“telenet”设备 IP,如果 telnet 失败则编写 SSH username@deviceIp.. 对于所有 Telnet IP,它
我正在使用 org.apache.commons.net.telnet 库与我的 Telnet 服务器建立连接,该服务器的实现与标准 RFC 854 略有不同,但没什么太可怕的。 实际上,我建立到此远
我正在使用 org.apache.commons.net.telnet 库与我的 Telnet 服务器建立连接,该服务器的实现与标准 RFC 854 略有不同,但没什么太可怕的。 实际上,我建立到此远
我的要求是从 Node js连接到Telnet客户端。 我正在使用 telnet-client包裹 我正在使用此代码进行连接 var Telnet = require('telnet-client')
我需要一个 expect 脚本来等待发出的命令完成,然后从 telnet 注销。这是脚本: spawn telnet host send "username\r" send "password\r"
我是一名优秀的程序员,十分优秀!