1. 程式人生 > 其它 >bt磁力搜尋網站中用到的dht 技術詳解(第二版

bt磁力搜尋網站中用到的dht 技術詳解(第二版

最全的磁力鏈搜尋引擎,國內外最受歡迎的BT-磁力網站(整理分享,每日不斷更新...)

OK搜尋-OKEYL.COM

磁力搜尋網站 這裡舉個博世搜尋的例子

DHT協議中的主要幾個操作:

主要負責通過UDP與外部節點互動,封裝4種基本操作的請求以及相應。

ping:檢查一個節點是否“存活”

在一個爬蟲裡主要有兩個地方用到ping,第一是初始路由表時,第二是驗證節點是否存活時

find_node:向一個節點發送查詢節點的請求

在一個爬蟲中主要也是兩個地方用到find_node,第一是初始路由表時,第二是驗證桶是否存活時

get_peers:向一個節點發送查詢資源的請求

在爬蟲中有節點向自己請求時不僅像個正常節點一樣做出迴應,還需要以此資源的info_hash為機會盡可能多的去認識更多的節點。如圖,get_peers實際上最後一步是announce_peer,但是因為爬蟲不能announce_peer,所以實際上get_peers退化成了find_node操作。

 

announce_peer:向一個節點發送自己已經開始下載某個資源的通知

爬蟲中不能用announce_peer,因為這就相當於通報虛假資源,對方很容易從上下文中判斷你是否通報了虛假資源從而把你禁掉

bt torrent search engine 推薦 每日更新 2022-04-17 更新
writeObject()中的第一個操作;並呼叫 defaultReadObject(),令其作為 readObject()的第一個操作。這些 都是不常見的呼叫方法。舉個例子來說,當我們為一個 ObjectOutputStream 呼叫 defaultWriteObject()的 時候,而且沒有為其傳遞引數,就需要採取這種操作,使其知道物件的控制代碼以及如何寫入所有非 transient 的部分。這種做法非常不便。

transient 物件的儲存與恢復採用了我們更熟悉的程式碼。現在考慮一下會發生一些什麼事情。在 main()中會 建立一個 SerialCtl 物件,隨後會序列化到一個 ObjectOutputStream 裡(注意這種情況下使用的是一個緩衝 區,而非檔案——與 ObjectOutputStream 完全一致)。正式的序列化操作是在下面這行程式碼裡發生的: o.writeObject(sc);

其中,writeObject()方法必須核查 sc,判斷它是否有自己的 writeObject()方法(不是檢查它的介面——它

根本就沒有,也不是檢查類的型別,而是利用反射方法實際搜尋方法)。若答案是肯定的,就使用那個方 法。類似的情況也會在 readObject()上發生。或許這是解決問題唯一實際的方法,但確實顯得有些古怪。

版本問題 有時候可能想改變一個可序列化的類的版本(比如原始類的物件可能儲存在資料庫中)。儘管這種做法得到 了支援,但一般只應在非常特殊的情況下才用它。此外,它要求操作者對背後的原理有一個比較深的認識, 而我們在這裡還不想達到這種深度。JDK 1.1 的 HTML 文件對這一主題進行了非常全面的論述(可從 Sun 公司 下載,但可能也成了 Java 開發包聯機文件的一部分)。

10.9.3 利用“永續性” 一個比較誘人的想法是用序列化技術儲存程式的一些狀態資訊,從而將程式方便地恢復到以前的狀態。但在 具體實現以前,有些問題是必須解決的。如果兩個物件都有指向第三個物件的控制代碼,該如何對這兩個物件序

列化呢?如果從兩個物件序列化後的狀態恢復它們,第三個物件的控制代碼只會出現在一個物件身上嗎?如果將 這兩個物件序列化成獨立的檔案,然後在程式碼的不同部分重新裝配它們,又會得到什麼結果呢?
————————————————
版權宣告:本文為CSDN博主「roak」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/rivern/article/details/124225044