我的目标是识别firefox-plugin中的TCP连接。通过JavaScript访问TCP连接
为此,我需要为每个连接设置一个唯一的ID。我的问题是,如果有可能,并且有人知道如何从HTTP请求访问TCP连接的对象?然后我可以为它设置一个唯一的ID,并且每个请求/响应对都将唯一设置为一个连接。
我的目标是识别firefox-plugin中的TCP连接。通过JavaScript访问TCP连接
为此,我需要为每个连接设置一个唯一的ID。我的问题是,如果有可能,并且有人知道如何从HTTP请求访问TCP连接的对象?然后我可以为它设置一个唯一的ID,并且每个请求/响应对都将唯一设置为一个连接。
虽然我不知道直接回答你的问题,但我建议看看source code for Firebug,它似乎至少可以访问网络堆栈的HTTP请求级别,甚至可能更低。
希望这会有所帮助,祝你好运!
谢谢,但Firebug只显示有关请求/响应对(所有标题)的信息,但没有关于它运行的连接的信息。 –
假设你在谈论客户端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);
我正在使用Firefox扩展HttpFox,我已经有了这样的代码。
但缺少的是有关tcp连接的信息。
我可以看到头文件“keep-alive”和“connection”,但没有映射到连接本身。 –
我做我自己的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;
}
};
看起来不错,但这个答案也仅限于http-request/response,并且没有提供有关tcp-connection的信息。不管怎么说,还是要谢谢你! –
我想我不明白这个问题,也许你可以改说一下吗?你需要什么样的信息?最接近“tcp连接”的我知道的是[nsiHttpChannel](https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIHttpChannel)。 – skabbes
你看着萤火虫吗?它是开源的https://developer.mozilla.org/en/Firebug_internals –
好问题;有一个upvote。 –
你可以重新解释一下,包括你需要从tcp连接对象获得什么类型的信息吗?或者更好的是,解释你的最终目标。 – skabbes