我的客户端安装了我想用来发送短信的MicroTik路由器。 它配备了我可以连接的telnet服务器。 我在Linux系统上使用telnet命令对它进行了测试并且工作正常。我telnet到指定端口的IP,然后它提示我登录 - 用户名和密码。验证后,我运行
/tool sms send usb1 "[celnumber]" message="[message]"
我找到了这个节点包:node-telnet-client
我配置了它,并在他们的页面上运行了示例。 事情就是准备回调从不触发,更不用说连接立即关闭了。不仅如此,我不明白如何使用提示,因为文档缺乏这种意义,而且我对telnet服务器的不存在经验也没有帮助我。
所以我真正需要的是一个关于如何:
的好例子来自nodejs服务器。如果需要,我可以提供额外的信息。
由于
编辑: 我的解决方案......
我运行了node-expect来运行expect脚本。例如......
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);
}
预期脚本
#!/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
当然,您需要添加安全性以及不需要的内容。