0

シンプルなソケット スクリプトを使用して、Battlefield ヒーロー サーバーへの rcon 接続を確立しています。返されたデータからシードを取得し、それをパスワードと連結して、必要なログイン ハッシュの作成に使用する必要があります。ただし、文字列は通常の文字列メソッドでは連結されません。文字列を個別に出力すると問題なく表示されますが、単純に結合されないため、ハッシュできます。

var net = require('net');
var crypto = require('crypto');
var md5sum = crypto.createHash('md5');

var HOST = '<ip address>', PORT = <port>,
PASSWORD = '<password>';
var client = new net.Socket();
client.connect(PORT, HOST, function() {
    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
});

client.on('data', function(data) {
    console.log(data.toString());
    response = data.toString();
    if (data.toString().slice(0,10) == "### Digest") {
        var seed = response.slice(17); 
        auth = seed.concat(PASSWORD);
        console.log('auth: '+auth);
        hash = require('crypto').createHash('md5').update(auth).digest("hex");
        console.log(hash);
        //client.write('login '+hash+' \n');
    }
    //client.destroy();
});

client.on('close', function() {
    //do something on close
});

client.on('error', function(err) {
    console.log(err);
});
4

1 に答える 1

0

自分に合った解決策を見つけました。やり過ぎかどうかはわかりませんが、両方の文字列を新しいバッファーに渡すことにしました。次に、それらを配列に渡して結合しました。(肩をすくめて)それでいいと思います。より良い解決策はありますか?

var net = require('net');
var crypto = require('crypto');
var md5sum = crypto.createHash('md5');

var HOST = '<ip address>', PORT = <port>,
PASSWORD = '<password>';
var client = new net.Socket();
client.connect(PORT, HOST, function() {
    console.log('CONNECTED TO: ' + HOST + ':' + PORT);
});

client.on('data', function(data) {
    console.log(data.toString());
    response = data.toString();
    if (data.toString().slice(0,10) == "### Digest") {
        var a = new Buffer(response.slice(17));
        var b = new Buffer(PASSWORD);
        var auth = new Array();
        auth += a.toString().replace(/\n/g,'');
        auth += b.toString();
        hash = require('crypto').createHash('md5').update(auth).digest("hex");
        client.write('login '+hash+' \n');
    }
    //client.destroy();
});

client.on('close', function() {
    //do something on close
});

client.on('error', function(err) {
    console.log(err);
});
于 2012-10-18T15:33:30.883 に答える