Express 使用nodejs登录telnet服务器,进行身份验证并运行命令
我的客户安装了一个MicroTik路由器,我想用它发送短信。 它附带一个我可以连接的telnet服务器。 我在Linux系统上使用telnet命令对它进行了测试,并且它可以正常工作。我在指定的端口远程登录到ip,然后它会提示我输入登录名-用户名和密码。身份验证后,我运行Express 使用nodejs登录telnet服务器,进行身份验证并运行命令,express,nodes,telnet,Express,Nodes,Telnet,我的客户安装了一个MicroTik路由器,我想用它发送短信。 它附带一个我可以连接的telnet服务器。 我在Linux系统上使用telnet命令对它进行了测试,并且它可以正常工作。我在指定的端口远程登录到ip,然后它会提示我输入登录名-用户名和密码。身份验证后,我运行 /tool sms send usb1 "[celnumber]" message="[message]" 我已找到此节点包: 我配置了它,并在他们的页面上运行了这个示例。 问题是on ready回调从不触发,更不用说连接会
/tool sms send usb1 "[celnumber]" message="[message]"
我已找到此节点包:
我配置了它,并在他们的页面上运行了这个示例。
问题是on ready回调从不触发,更不用说连接会立即关闭。不仅如此,我不知道如何使用提示符,因为文档缺乏这种意义上的提示,而且我不存在的telnet服务器经验对我也没有帮助
因此,我真正需要的是一个关于如何:
- 登录到telnet服务器
- 验证后运行命令
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var PORT = 4000;
app.use( bodyParser.json() ); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
app.post('/sms', function (req, res) {
var phoneNumber = req.body.phoneNumber,
message = req.body.message,
var isWin = require('os').platform().indexOf('win') > -1;
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
if(isWin) {
console.error('CANNOT USE THIS FROM A WINDOWS HOST');
res.status(500).send('Only works on Linux systems with the <expect> command line script.')
}
if(typeof phoneNumber === 'string' && typeof message === 'string') {
if(__CommandExists('expect')) {
__RUNCMD('expect', ['sms.exp', phoneNumber, message]);
res.status(200).send('Request sent !');
} else {
res.status(500).send('<expect> required to be installed on the host machine !');
}
} else {
res.status(500).send('Required parameters : phoneNumber [string] and message [string].');
}
});
app.listen(PORT, function () {
console.log('SMS app running on port ' + PORT);
})
function __RUNCMD(cmd, args, callback ) {
var spawn = require('child_process').spawn;
var child = spawn(cmd, args);
var resp = "";
child.stdout.on('data', function (buffer) {
resp += buffer.toString()
});
child.stdout.on('end', function() {
if(callback) {
callback (resp)
}
});
}
function __CommandExists(command) {
var commandExistsSync = require('command-exists').sync;
return commandExistsSync(command);
}
当然,您需要添加安全性之类的东西。您好,您找到解决方案了吗。因为我有类似的要求。如果您有任何解决方案,请与我们分享。我使用node expect运行expect脚本。点击一条路线,运行expect脚本,获得返回。Expect仅适用于Linux afaik。我编辑了我的问题。
#!/usr/bin/expect
set timeout 20
#set hostName [lindex $argv 0]
#set port [lindex $argv 1]
#set userName [lindex $argv 2]
#set password [lindex $argv 3]
#set mobil [lindex $argv 4]
#set mesaj [lindex $argv 5] - aici e cu problema, sau restul argumentelor formează mesajul...
set phoneNumber [lindex $argv 0];
set message [lindex $argv 1];
spawn telnet [ip] [p] // defaults to 2323
expect "Login:"
send "yourusername\r"
expect "Password:"
send "yourpass\r"
#interact
expect "\[sms@MikroTik\] > "
send "\/tool sms send usb1 \"$phoneNumber\" message=\"$message\"\r"
#interact
expect "\[sms@MikroTik\] >"
send "\r"
send "quit\r"
expect eof