Posts tagged ‘java’

SSL Tunnel implementation on Java(2)

上一回寫到 SecureSocket 不需認證的產生方法,今次該直接寫 SecureSocket 本身的運作了。

我們可以透過

Socket sslsocket = (SSLSocket)MySSLSocketFactory.createSocket(Socket proxyConn, String logicalHost, int logicalPort, true);

在原有的連線 (指連到 Proxy 的連線)建立新的 SSL 連線。

但是,在這之前,我們要跟 Proxy 本身連線,再傳出指令請 Proxy 連到真正的伺服器:

Socket proxyConn = new Socket(String proxyHost, int port);
OutputStream out = proxyConn.getOutputStream();
try {
out.write(cmd.toString().getBytes("ASCII7"));
} catch (UnsupportedEncodingException ignored) {
//ASCII7 Not supported
out.write(cmd.toString().getBytes());
}

cmd 是傳給代理伺服器的建立連線指令。內容如下:
StringBuffer cmd = new StringBuffer();
cmd.append("CONNECT ").append(site).append(':').append(port).append(" HTTP/1.1\r\n");
cmd.append(header + "\r\n");
cmd.append("Proxy-Connection:keep-alive\r\nHost: ").append(site).append("\r\n\r\n");

假設我要建立SSL 連線到 foo.com,指令是這樣的:(\r\n 換列指令不寫出來了,header 變數換成了要假裝的瀏覽器,而以下例子我在假裝 Firefox 1.5)
CONNECT foo.com:443 HTTP/1.1
User-Agent: Mozilla/5.0 (Windows;U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5
Proxy-Connection:keep-alive
Host: foo.com

傳送給代理以後,如果連線成功,伺服器會傳回以下訊息:(注意:找字的時候建議把字全換成小階)
HTTP/1.1
200 Connection Established
...

而我們只要找 200 Connection Established 這幾個字,就知道連線有沒有成功了。這個留給大家作練習吧!(其實是我懶寫而已)
下一次會寫真正把本機連線轉到 SSL 的程式碼,也會介紹SSL Tunnel 伺服器及客戶端的分別。

SSL Tunnel implementation on Java(1)

SSL Tunnel 有甚麼用處我不解釋了,有空便到 google 找找看吧。簡單一點說,那是一套反生產軟件,所以千萬不要在老闆前使用。
Continue reading ‘SSL Tunnel implementation on Java(1)’ »

本年最後三個工作天

這三天裏,我休閒得很,也悶得很。Project 順利度過了 UAT,再加上身邊的同事全部選擇去享受他們儲起來的假期,我在辦公室裏所以也沒事可做。

沒有東西可以做實在無聊透頂,而為了補足在工作間的空虛感,我居然動手寫程式 — 為了興趣吧。第一日我在收拾這裏不符合 XHTML 1.1 的地方,也花了我整天時間。第二和第三日呢,我把我的注意力集中放在香港天文台 — 它的氣象服務。原來天文台有提供 XML 天氣資訊服務,但費用實在貴得令人咋舌 (年費港幣 $3,310)。我想由於無人問津,服務也在零五年一月終止。

不過其實也不用透過 才可以從程式取得天氣資訊吧?文字版的天文台網頁格式很整潔,所以也很容易從程式取出有用的資訊,諸如氣溫呀,濕度呀,紫外線指數呀,分區氣溫等等。這幾天我便以 寫這樣的一個類別,以 Regular Expression(常規表達式)取出不同資料。

對了,我在家還把整個 Java class 的程式碼移到 ,那便可以在這個伺服器發放相應的 Web Service,給其他網站使用。不過天文台的資訊有版權,所以如果要公開的話我也要取得相關許可才能這樣做。

但不知道發放提取程式的源碼如何呢?情況有點像 BT 或其他 P2P 軟件 — 提取工具本身並不犯法,但提取有版權保護的資訊才會涉及侵權。我想我也可以公開源碼吧,就把那個 Java class 貼出來好了。

還有,祝大家在新的一年,有一個新的開始。新年快樂… 噢,不要「快落」,新年愉快才對。

程式碼在這裏下載。

IBM:沉默的巨人

不久前 的個人電腦業務正式轉給聯想經營,當然是因為 個人電腦銷售情況欠佳(這種古老的設計,有人會買嗎?),而大批購買的辦公室電腦又敗給戴爾(Dell)了,PC 市場自然沒有留戀的理由。聯想能不能令那毫無起息的個人電腦業務重新是另一回事,倒想談談 還有甚麼可以發展的地方。

另一件較廣為人知關於 IBM 的新聞當然是下一代的遊戲主機 PS3,XBox 360 統統轉用 IBM 的 Cell 和 PowerPC 處理器。每顆處理器的利潤我想也有三成吧,但是開發處理器的費用高昂,而 Cell 又不是打零售市場,只做處理器生意看來並不划算。IBM 早前宣佈他們日後的定位是搞 B2B 為企業提供服務,而這又是甚麼樣的服務呢?

IBM 為大公司推出的產品可多著了,可以說是一條龍全包服務:由大型主機(mainframe) 的 zSeries 和 OS/400,中小型伺服器如 iSeries,xSeries,pSeries 等等也是 IBM 的天下 (特別是大型主機方面)。當然還有大型印表機和收銀機,但市場佔有就沒那麼大了。軟體就更厲害了:由網絡整合和管理的 Tivoli 系列,內部通訊的 Lotus,資料庫 DB2(資料庫是最弱的一環啊),應用伺服器及Portal Server WebSphere,軟體開發的 Rational 系列(當然也就包括了 UML 繪圖會用上的 Rational Rose)。

近來 IBM 好像有意「控制」 市場。先是給 Eclipse 開源,後支援 Apache 在搞 Geronimo (J2EE 容器) 和 Harmony (JVM)。 的親生老爸 Sun 自然老大不滿意:罵 SWT,屈服了以後又鄙視 Harmony。倒是這次我卻希望 IBM 能成功踩界,不知道是否跟 Sun 的宣傳手法還是 給 Sun 接近完全控制有關。

除了在家用機市場外,我對這家大公司有一點點的好感。也有可能是微軟的手下敗將(大家仍記得 OS/2 嗎?),也可能是近來它在開源上作出的努力。現在 home consumer 成了 Lenovo,我也衷心希望它能站穩住腳,因為我喜歡看大企業打大企業。

What I hate about Java…

Time to do some bashing…

我想,要痛恨一個人,最好便是和他/她共事。和他/她共事,你可以真真正正認識他/她的性格,便會知道厭惡他/她的理由。和 Java 共事的這幾個月,我開始有點恨 Java 的瑕疪,而在編譯工作進行的時候,有空看看 Ruby 的 doc,噢,原來 Ruby 這麼美。

Java 有甚麼問題?不,JVM 不是問題。靠寫程式來糊口的人,效能不是我的 concern,反正公司有能力買更快更強的伺服器來 compensate 就是了。那些是系統管理員要注意的事。我著緊的,是語言的自由度和可用性。
Continue reading ‘What I hate about Java…’ »

讀書報告:爪哇夜未眠 – Java 程式員的心聲

因為家裏沒人,所以吃午飯的時候到了新城市逛逛和找東西吃。路經公共圖書館,心裏覺得不進去就此路過未免太可惜,所以忍不住要入去看看書架。結果就給我找到這本有趣而實用的「編程散文集」了。
Continue reading ‘讀書報告:爪哇夜未眠 – Java 程式員的心聲’ »

single