GoogleDesktopProxy

自從使用了 GoogleDesktop 之後,它強大的搜尋信件文件能力,讓我減少了許多尋找資料的時間。尤其是在辦公室裡,常常記得某個資料曾經看過,找了很久但就是找不到放在哪兒。這個時候,GoogleDesktop 就發揮了很大的效用,輸入關鍵字後,馬上就幫你將所有相關的文件通通找出來列給你。

最近公司同事想把一些文件整理以後放在一台公用電腦上面,然後利用 GoogleDesktop 讓大家可以利用關鍵字搜尋來尋找有用的資料。經過實驗之後,假設公用電腦的 IP 是 192.168.1.100,由於 GoogleDesktop 只會 Listen 127.0.0.1 這個 loopback 的 IP,因此其他同網段(192.168.1.*) 的電腦無法連結到 GoogleDesktop 的搜尋網址。

碰到這種問題,最直接的想法就是搞一個 proxy server,讓 proxy server listen 192.168.1.100:4664,然後將所有連往 192.168.1.100:4664 的 packet 全部 forward 到 127.0.0.1:4664,如此一來應該就可以連到 GoogleDesktop 的搜尋網址。不過很遺憾的,經過實驗結果,會出現下面情形..

我初步猜想是 Browser 送過來的 HTTP header 中,GoogleDesktop 只接受 Host: 127.0.0.1:4664。所以馬上用 telnet 動手實驗了一下

[root@broso shell]# telnet 192.168.1.12 4664
Trying 192.168.1.12…
Connected to 192.168.1.12.
Escape character is '^]'.
GET /&s=Gcp35yLaRKNq-qK-MNo25UNQjO0 HTTP/1.1
Host: 192.168.1.12:4664
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-tw,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Big5,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-control: no-cache, no-store, must-revalidate
Connection: close

<!–
Content-type: fix-mhtml

–><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>錄無效的要求</title>
<style>

後面省略

把上行的 Host: 192.168.1.12:4664 改為 Host: 127.0.0.1:4664 之後,結果真的就成功了,GoogleDesktop 就會回覆正確的搜尋頁面了..

[root@broso shell]# telnet 192.168.1.12 4664
Trying 192.168.1.12…
Connected to 192.168.1.12.
Escape character is '^]'.
GET /&s=Gcp35yLaRKNq-qK-MNo25UNQjO0 HTTP/1.1
Host: 127.0.0.1:4664
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-TW; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: zh-tw,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Big5,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-control: no-cache, no-store, must-revalidate
Connection: close

<!–
Content-type: fix-mhtml

–><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Google 桌面</title>

後面省略

知道 GoogleDesktop 原理之後,馬上動手來改寫個小型 Proxy Server。先前為了能夠從公司內部自由穿梭到外部 internet 世界,曾經寫了一個小型 SSL 加密的 Proxy Server(這個以後有機會再來寫),因此我的想法很簡單,是只要將中間穿梭的封包加以處理一下,碰到 Host: 192.168.1.100:4664 的 HTTP header,就置換為 Host: 127.0.0.1:4664。理論上應該就沒問題才是。

改完之後,馬上試驗一下,果然頁面很成功出現了。

不過再試下去,又發現一些問題…

咦,怎麼網址又被改為 http://localhost 了,看起來除了上行的 HTTP Header 要置換之外,連下行的 HTTP Header 及 HTML content 都得做一下過濾跟置換。所以又修改了一下程式,碰到 http://localhost 或是 http://127.0.0.1 都置換為 http://192.168.1.100:4664 。修改完畢後,馬上又試驗了一下… 

果然馬上就成功了。有興趣的人可以在這裡下載 GoogleDesktopProxy

簡單說明一下安裝方法:

  1. 將下載回來的 GoogleDesktopProxy.rar 解開放在同一個目錄下。
  2. 修改 start_proxy.cmd,將 "C:\Program Files\Java\jre1.6.0_03\bin\java" 改為你所使用的 JRE 或 JDK 路徑
  3. 修改 proxy.properties 中,我標為黃色字體的部分

參數 Host 指的是安裝 GoogleDesktop 那台電腦的 IP
參數 AllowList 指的是允許連接 GoogleDesktopProxy 的 IP 清單,所以沒列在裡面的 IP 都會被檔掉唷
參數 ReplaceLineFrom 跟 ReplaceLineTo 這兩個參數是成對的,GoogleDesktopProxy 會過濾所有經過的封包,是不是包含了 ReplaceLineFrom 所指定的字串,如果有,就置換為 ReplaceLineTo 所指定的字串。
所以 ReplaceLineFrom_1 請同樣修改為安裝 GoogleDesktop 那台電腦的 IP。ReplaceLineFrom_2 跟 ReplaceLineTo_3 亦同。


Host=192.168.1.12
Port=4664
TargetHost=127.0.0.1
TargetPort=4664
LeftSSL=0
RightSSL=0

AllowList=127.0.0.1,192.168.1.*,10.23.4.*
LogDir=log

SSLTimeOut=300
SSLKeystore=KEYSTORE.jks
SSLKeystorePassword=broso.net
SSLTruststore=TRUSTSTORE.jks
SSLTruststorePassword=broso.net

ReplaceLineFrom_1=Host: 192.168.1.12:4664
ReplaceLineTo_1=Host: 127.0.0.1:4664

ReplaceLineFrom_2=http://127.0.0.1:4664
ReplaceLineTo_2=http://192.168.1.12:4664

ReplaceLineFrom_3=http://localhost:4664
ReplaceLineTo_3=http://192.168.1.12:4664

之後如果有機會的話,再來說明一下上述 SSL 相關參數的使用方法。

有興趣研究原始碼的人,可以留言跟我索取。

VAIO S56 安裝 Vista Driver 的正確順序

兩年前 VAIO S56 買來時,原先所搭配的作業系統是 Windows XP Professional,而原廠附贈的還原光碟相當便利,使用還原光碟可將 S56 還原為原先出廠的狀態,使用者無須另外自行安裝各項裝置的驅動程式,S56 買來就是可以馬上上路開始工作。去年 Vista 推出後,試用 Vista 一陣子後,覺得 Vista 在 S56 上的執行效能,似乎也還蠻不錯的,於是便在 Yahoo 購入了 Vista Home Premium。使用正版的感覺的確不錯,尤其是微軟在 Windows Update 上增加許多檢核正版作業系統的限制之後,使用盜版軟體的確變得很麻煩,不用再到處找尋 crack,或是擔心 crack 中含有木馬之類的問題。其實支持正版的確也是資訊人所該做的事啦。

不過 S56 自行安裝 Vista 完畢之後,其實距離真正方便便利仍有一大段距離。怎麼說呢?除了部分驅動程式 Vista 仍未內建,所以裝置管理員中仍然會有三項裝置處於驚嘆號的狀態(這三個裝置分別是 Texas Instruments PCI7420 Integrated FlashMedia Controller、Sony Notebook Control Device 以及 Sony Programmable I/O Control Device),後二者可以透過 Windows Update 更新時可以自動找到驅動程式,而前者我試著使用 XP 的驅動程式來安裝,竟也正常無誤的安裝成功,所以驅裝置可以全部安裝完畢。不過其餘音效與顯示卡的部分,雖然 Vista 內建驅動程式,但音效的驅動程式重新開機之後,竟會顯示此驅動程式不相容於 Vista。這還真扯!也許是 Realtek 拿給 Vista 認證的驅動程式,微軟自己並沒驗證過 @@。

顯示卡雖然 Vista 也內建 NVidia GeForce GO 6400 顯示晶片的驅動程式,不過這內建的驅動程式在播放 DVD 電影,似乎動態的影像無法顯示出來。想當然爾,是去原廠找驅動程式,而在原廠網站選擇下載 GeForce GO 6400 驅動程式時,會告訴你請自行至 Sony 網站下載。但是回到 Sony 網站來找,竟發現 Sony 並未提供給 S56 Vista 版本的各項驅動程式 @@。找了很久,終於有人提到可以自行修改原 NVidia 廠驅動程式的 INF 安裝檔,加入 GeForece GO 6400 晶片的參數,使得S56 安裝時可以認得這是顯示卡的驅動程式。安裝完畢後,果然電影放起來就沒問題了。

其實還有一個最大的問題是,S56 鍵盤上一大堆的快捷鍵,像是 S1 / S2、Fn 功能鍵,藍芽與 Wireless LAN 切換的功能完全失效。S1 / S2 快捷鍵不能用就算了,但 Fn 功能鍵實在是很重要,像是螢幕亮度明暗、PageUp / PageDown / Home / End、LCD / 外接螢幕切換,這些功能沒了 Fn 功能鍵之後,也等於是廢了。在 Google 上找了很多文章,大抵都是提到要安裝 Sony Utility DLL 與 Sony Event Service 等軟體套件才能將這些功能鍵恢復。不過試了很久都沒試出來,最後等到我終於受不了沒有 Fn 鍵的日子,最後還是放棄了 Vista,重新回到 XP 的懷抱。

這兩天趁著春節過年沒事做,又把塵封已久的 Vista 挖出來想再來試試。重灌後沒想到問題還是一樣,不過這次有找到一篇文章提到如何將 VAIO SZ38 升級至 Windows Vista,原來 Sony 的各項驅動程式與軟體套鍵之間是有一個安裝的先後順序以及何時該重新開機步驟。我依樣畫葫蘆,比對SZ38 與 S56 之間的周邊裝置差異,調整了一下安裝順序,竟然就一次成功了,所有的快捷鍵與功能鍵馬上重獲新生。欣喜之餘,第一個想到的是就是趕緊記錄下來,免得下次又碰到一樣的情形。

下面就是各項驅動程式及軟體套件的安裝順序

  1. Sony Utilities DLL Update
  2. Sony Shared Library Update
  3. 重新開機
  4. VAIO Event Services Update
  5. Realtek High Definition Audio Driver
  6. VAIO Control Center
  7. Sony Utility Series
  8. VAIO Power Management
  9. Wireless Switching Utility
  10. Texas Instruments Driver for Memory StickR Controller Driver
  11. ALPS Pointing Device (Touchpad) Driver and and Control Utility
  12. NVidia_GeForce_100.40
  13. 重新開機
  14. Sony Utility Series update
  15. 重新開機

如果 VAIO 要從 XP 升級到 Vista 的話,可以參考看看。