本 研 究 使 用 的 環 境 為 Debian 以 及 openjdk-11-jdk, 實 作 了 JAVA 的 Standard Edition (SE) 內容,但 JSON 格式的剖析會用到 Enterprise Edition(EE) 的 package,
可以到 [19] 下載 javax.json-(version).jar。編輯家目錄的.bashrc 設定檔,在最後增加一 行指令如下︰
export CLASSPATH=$CLASSPATH:/usr/share/java/java.json-(version).jar
3.6.1 主要使用的 package .
javax.json 包含 ObjectBuilder 與相關 Factory method,可以將現有 JsonObject 複 製,並且增加、刪除或修改 Json 的值,或轉換成字串輸出。javax.stream.Parser,用 [20],使用 Pre-built binary wheel 方法,因為需要用到較新的功能,如果直接從 pip 取 得,部份功能無法支援。參考 nightly builds 的安裝方法說明,下載適合作業系統與 CPU 架構的.whl 檔,並且執行下列指令
pip install <所安裝的檔案>.whl
使用梯度提昇機辨認暗網市場之毒品高衝擊賣家 3.7 Python packages
嘗試安裝 XGBoost 的過程中,會連帶將具有相依性的 python 套件一併安裝,包含 numpy、scipy。
XGBoost 的輸入資料必須是純數字,因此需要從文字轉為數字,這其中就必須考 慮抽取的特徵。而在應用在 DNM 的案例中,時常會遇到 categorical variable,也就是 nominal data,例如︰賣家帳號、藥物名稱等。訓練的時候,如果僅是單純轉為整數,
容易誤判成帳號與帳號之間有距離的關聯性差異,可能會影響訓練結果。根據 [21] 的 說明,可以配合 pandas、sklearn 對 categorical variable 做 one-hot encoding,依據每 個 variable 的 domain 大小,決定將變數轉成的行向量之⻑度。
使用梯度提昇機辨認暗網市場之毒品高衝擊賣家
4 爬蟲架構
.
以下將以本研究所撰寫的 JAVA 程式碼中所使用到的 Class 進行說明。
4.1 取得連線到 DNM 需要的 header
.
先建立 ConnectionMap Class,分別建立三個 Map 作為 member variable,cook-ieMap、headerMap、fieldMap。 再 分 別 建 立 三 個 methods,setCookie、setHeader、
setField 作為存放實做的 method。其中 cookieMap 與 headerMap 是用來連上 DNM,
fieldMap 是用來幫助 Jsoup 定錨 (byId, byClass, byTag 等)。每次要爬取新的 DNM 時,就撰寫新的 JAVA Class,並繼承 ConnectionMap。具體作法如下︰
1. 啟動 torbrowser 瀏覽器,進入 onion.live[12] 取得目標 DNM 的 public key,順利 進入網頁。
2. 通過帳號密碼認證 (若有必要,必須先註冊)、手動通過認證碼驗證 CAPTCHA。
3. 順利登入以後,在 torbrowser 按下 F12,選擇網路 (network),然後按下由上往 下數,第一個遇到的狀態為 200(OK) 的請求,選擇檔頭 (headers)。
4. 查看請求檔頭 (request headers),因為 JAVA 程式的目的是模擬出瀏覽器所產生 出來的封包⻑相,所以要查看的是請求而非回應。
5. 把請求檔頭中,cookie 的那一行,全部內容複製,並儲存成 config<DNM>,並 在 setCookie 指定 cookie 檔案的名稱,例如︰ configElite。然後把檔案中的字 串,轉為 Map 儲存在 cookieMap 中。
使用梯度提昇機辨認暗網市場之毒品高衝擊賣家 4.1 取得連線到 DNM 需要的 header
6. 把請求檔頭中,除了 cookie 以外的所有 key value pair 全部在 headerMap 中一一 新增。
範例︰圖 1是實際取得的 headers。把請求標頭中的 Cookie 冒號右邊的全部內 容,儲存在 configElite。
PHPSESSID=jj5vfmqvf8n0jp67qcc6qjv6r
並在 ConnectionMapElite.java 中的 setHeader 實做 public void setHeader() {
headerMap.put("Host",
"elitemk4vggs2zlx7rjdc7hrkvrm6bslyetxwfyo5kt2yykgz5yg4wyd.onion");
headerMap.put("Referer", "http://elitemk4vggs2zlx7rjdc7hrkvrm6bslye txwfyo5kt2yykgz5yg4wyd.onion/");
}
圖 1: 使用 torbrowser 瀏覽 elite DNM 實際取得的 headers