3

Firefox を使用して SSH バナーを読み取ろうとしています。すなわち。SSH サーバーに最初に接続すると、サーバーはサーバー ソフトウェアを識別するバナーを送信し、ユーザーはクライアント ソフトウェアを識別するバナーを SSH サーバーに送信します。

そのために、次の URL の例を使用しています。

Firefox拡張javascriptにnsiClientSocketはありますか?

これが私のコードです:

'use strict';

const {Cc,Ci} = require("chrome")
const prefs = require("simple-prefs");


exports.main = function(options,callbacks) {
    var transport = Components.classes["@mozilla.org/network/socket-transport-service;1"]
                              .getService(Components.interfaces.nsISocketTransportService)
                              .createTransport(null, 0, "localhost", 22, null);

    //var output = transport.openOutputStream(0, 0, 0);
    var input = transport.openInputStream(0, 0, 0);
    var data = "test";
    dump(stream.read());
    //stream.write(data, data.length);
    //stream.close();
    dump("all done!");
};

これで cfx xpi を実行すると、次のようになります。

The following lines from file C:\path\to\lib\main.js:
   8: var transport = Components.classes["@mozilla.org/network/socket-transport-service;1"]
   9: .getService(Components.interfaces.nsISocketTransportService) use 'Components' to access chrome authority. To do so, you need to add a line somewhat like the following:

  const {Cc,Ci} = require("chrome");

Then you can use any shortcuts to its properties that you import from the 'chrome' module ('Cc', 'Ci', 'Cm', 'Cr', and 'Cu' for the 'classes', 'interfaces', 'manager', 'results', and 'utils' properties, respectively. And `components` for `Components` object itself).

だから私は代わりにこれを試します:

'use strict';

const {Cc,Ci} = require("chrome")
const prefs = require("simple-prefs");


exports.main = function(options,callbacks) {
    var transport = components.classes["@mozilla.org/network/socket-transport-service;1"]
                              .getService(interfaces.nsISocketTransportService)
                              .createTransport(null, 0, "localhost", 22, null);

    //var output = transport.openOutputStream(0, 0, 0);
    var input = transport.openInputStream(0, 0, 0);
    var data = "test";
    dump(stream.read());
    //stream.write(data, data.length);
    //stream.close();
    dump("all done!");
};

すなわち。私は Components コンポーネント (小文字) と Components.interfaces をただのインターフェースにしています。しかし、コンソールに次のエラーが表示されます。

    var transport = components.classes["@mozilla.org/network/socket-transport-service;1"]
ReferenceError: components is not defined

何か案は?

4

1 に答える 1

13

Cc代わりに、Components.classesおよびCi代わりに使用する必要があります-これらは、モジュールComponents.interfacesからインポートした変数であり、定義されています。chromeオブジェクト自体を使用する必要がある場合はComponents(ほとんどありませんが)、インポートすることもできます。

const {components, Cc, Ci} = require("chrome");

参考までに:クロームオーソリティ

于 2012-09-25T19:22:26.857 に答える