Доступ к TCP-соединению через JavaScript - PullRequest
3 голосов
/ 24 октября 2011

Моя цель - идентифицировать TCP-соединения в плагине firefox.

Для этого мне нужно установить уникальный идентификатор для каждого соединения. У меня вопрос, если это возможно, и кто-то знает, как получить доступ к объекту TCP-соединения из HTTP-запроса? Затем я могу установить для него уникальный идентификатор, и каждая пара запрос / ответ будет однозначно установлена ​​на соединение.

Ответы [ 4 ]

1 голос
/ 24 октября 2011

Хотя я не знаю прямого ответа на ваш вопрос, я бы посоветовал взглянуть на исходный код для Firebug , но, похоже, он имеет доступ как минимум к уровню HTTP-запросов сети стек, может быть, даже ниже.

Надеюсь, это поможет, удачи!

0 голосов
/ 25 октября 2011

Я делаю нечто очень похожее в моем собственном аддоне ff.Я предполагаю, что вы хотите ссылку на nsiHttpChannel, связанную с соединением.Однако я не уверен, что вы можете просто добавить к нему свойства (и сохранить их), так как он, вероятно, поддерживается собственным кодом, я не уверен в любом случае.Но вы можете хранить nsiHttpChannel в другом месте и сохранять идентификатор для него таким образом.

Вот несколько упрощенных кодов, которые я использую для отслеживания http-трафика в моем аддоне, что должно решить вашу проблему.

var Cc = Components.classes;
var Ci = Components.interfaces;

var MyHttpObserver = {
    // must be exposed so that the ObserverService can register itself
    observe: function(subject, topic, data) {
        subject.QueryInterface(Ci.nsIHttpChannel);
        if( topic === "http-on-modify-request" ){
            // store 'subject' somewhere
        } else if( topic === "http-on-examine-response" ){
            // look up 'subject' it will be the same reference as before
        }
    },

    register: function() {
        var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
        observerService.addObserver(this, "http-on-modify-request", false);
        observerService.addObserver(this, "http-on-examine-response", false);
    },

    unregister: function() {
        var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
        observerService.removeObserver(this, "http-on-modify-request");
        observerService.removeObserver(this, "http-on-examine-response");
    },

    QueryInterface: function (aIID) {
        if (aIID.equals(Ci.nsIObserver) || aIID.equals(Ci.nsISupports) ){
            return this;
        }
        throw Components.results.NS_NOINTERFACE;
    }
};
0 голосов
/ 24 октября 2011

Из MDN: как отслеживать активность HTTP

Вот их пример кода

// Define a reference to the interface
var nsIHttpActivityObserver = Components.interfaces.nsIHttpActivityObserver;

var httpObserver =
{
    observeActivity: function(aHttpChannel, aActivityType, aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData)
    {
      if (aActivityType == nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION) {
        switch(aActivitySubtype) {
          case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_HEADER:
            // received response header
            break;
          case nsIHttpActivityObserver.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
            // received complete HTTP response
            break;
        }
      }
    }
};

var activityDistributor = 
    Components.classes["@mozilla.org/network/http-activity-distributor;1"]
    .getService(Components.interfaces.nsIHttpActivityDistributor);
activityDistributor.addObserver(httpObserver);
0 голосов
/ 24 октября 2011

Предполагая, что вы говорите о клиентском JavaScript, есть несколько проектов, которые помогут вам достичь этой функциональности.

  1. http://code.google.com/p/jssockets/ [требуется вспышка]
  2. http://socket.io/

Надеюсь, это поможет.

...