我的目標是識別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