通过JavaScript访问TCP连接

通过JavaScript访问TCP连接,javascript,tcp,firefox-addon,httpconnection,Javascript,Tcp,Firefox Addon,Httpconnection,我的目标是识别firefox插件中的TCP连接 为此,我需要为每个连接设置一个唯一的ID。我的问题是,如果可能,并且有人知道如何从HTTP请求访问TCP连接的对象?然后我可以为它设置一个唯一的ID,每个请求/响应对都将被唯一地设置为一个连接。虽然我不知道你的问题的直接答案,但我建议看看,它似乎至少可以访问网络堆栈的HTTP请求级别,甚至更低 希望这有帮助,祝你好运 假设您正在谈论客户端javascript,那么有一些项目将帮助您实现此功能 [需要闪光灯] 希望能有帮助 来自MDN:如何监视HT

我的目标是识别firefox插件中的TCP连接


为此,我需要为每个连接设置一个唯一的ID。我的问题是,如果可能,并且有人知道如何从HTTP请求访问TCP连接的对象?然后我可以为它设置一个唯一的ID,每个请求/响应对都将被唯一地设置为一个连接。

虽然我不知道你的问题的直接答案,但我建议看看,它似乎至少可以访问网络堆栈的HTTP请求级别,甚至更低


希望这有帮助,祝你好运

假设您正在谈论客户端javascript,那么有一些项目将帮助您实现此功能

  • [需要闪光灯]

  • 希望能有帮助

    来自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);
    

    我在自己的ff插件中做了一些非常类似的事情。我假设您希望引用与连接关联的
    nsiHttpChannel
    。但是,我不确定您是否可以向它添加属性(并让它们持久化),因为它可能由本机代码支持,所以我不确定哪种方式。但是您可以将
    nsittpchannel
    存储在其他地方,并以这种方式在其上保留一个id

    下面是一些我用来监控插件中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;
        }
    };
    

    你看过萤火虫吗?这是一个开源的好问题;请重新措辞,以包括您需要从tcp连接对象获取的信息类型?或者更好的是,解释你的最终目标。谢谢,但是Firebug只显示关于请求/响应对(所有标题)的信息,而没有显示关于它运行的连接的信息。我正在使用Firefox扩展HttpFox,我已经有了这样的代码
    但缺少的是有关tcp连接的信息。
    我可以看到标题“保持活动”和“连接”,但没有映射到连接本身。看起来不错,但此答案也仅限于http请求/响应,并且没有提供有关tcp连接的信息。无论如何谢谢你!我想我不明白这个问题,也许你可以换个说法?你需要什么样的信息?据我所知,最接近“tcp连接”的是一个。