【Window】Tor(洋蔥頭路由)+Privoxy 網絡實踐(附帶Java實例代碼)


1.背景

平時我們需要訪問onion后綴的網站,需要通過Tor(The Onion Router,洋蔥路由器)。一般來說安裝Tor Broswer就可以滿足需要。但是項目我要做的是通過程序來獲取onion網站里面的內容。Tor官網推薦使用的是Stem來操作Tor,但是Stem是python的庫,我卻對Java較為熟悉。於是就想用Tor+Privoxy搭建網絡,然后在Java中使用上述的代理網絡獲取onion網站的數據。
一開始因為走錯路(最開始在ubuntu下配置,發現都無法成功,原因未明,足足弄了一天=.=),后來轉到Window下配置,發現很順利!所以記錄一下配置過程。

2.環境搭建

2.1 Tor

去Tor官網下載最新版本( https://www.torproject.org/download/download  ),如果上面的地址訪問不了(被牆,你懂的),可以使用這個地址 https://tor.eff.org/download/download.html.en  。下載后直接使用默認選項進行安裝,這里安裝目錄為:C:\tor-win32-0.2.7.6。安裝完后, 啟動 C:\tor-win32-0.2.7.6\Tor\tor.exe

注意:
目前Tor需要VPN才能正常使用,所以啟動tor.exe前先連接VPN,否則無法使用Tor網絡。

2.2 Privoxy

Window平台下直接從官網下載安裝包( http://www.silvester.org.uk/privoxy/Windows/3.0.23/ ),這里的安裝目錄為:C:\Program Files (x86)\Privoxy,安裝好后打開目錄下的config.txt,添加如下配置項:
forward-socks5 / localhost:9050 .
如下圖所示:

其中9050是Tor默認監聽端口,如果你修改了這里也得跟着修改。

此時重啟Privoxy即可。這里需要注意的是,Privoxy默認使用的是8118端口。

3.使用Tor網絡

3.1 在Firefox中使用

Firefox--選項--高級--網絡--連接,然后點擊“設置”,進入代理設置界面。


填寫如下信息即可


保存后,不出意外就可以訪問onion網絡了。onion網站可以再這里找到: http://thehiddenwiki.org/
上一張效果圖


3.2 在程序中使用

跟Firefox中同樣的原理,想要在Java中使用Tor,簡單的就是使用代理(之前試過Orchid, silvertunnel_ng這類框架,都沒有起作用,后來就沒有繼續嘗試,轉用Privoxy,如果有朋友有可行的方案,望分享)。
直接上代碼:
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/**
 * 使用tor代理下載onion網頁
 * @author nerve
 */
public class TorHttpClient {
    public static void main(String[] args) {
        // 創建HttpClientBuilder  
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();  
        // HttpClient  
        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();  
        // 依次是代理地址,代理端口號,協議類型  
        HttpHost proxy = new HttpHost("127.0.0.1", 8118, "http");  
        RequestConfig config = RequestConfig.custom().setProxy(proxy).build();  
  
        // 請求地址  
        HttpGet httpPost = new HttpGet("http://mobil7rab6nuf7vx.onion/");  
        
        httpPost.setConfig(config);  
        try {  
            CloseableHttpResponse response = closeableHttpClient.execute(httpPost);
            HttpEntity httpEntity = response.getEntity();  
            System.out.println("response code="+response.getStatusLine().getStatusCode());
            if (httpEntity != null) {  
                // 打印響應內容  
                System.out.println("response content: \n"  
                        + EntityUtils.toString(httpEntity"UTF-8"));  
            }  
            // 釋放資源  
            closeableHttpClient.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        } 
    }
}  

引用的Jar包:

OK。






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM