2011年12月20日 星期二

如何避免假造DNS回應? 我在神聖的祖國也想上Facebook~

我人在深圳~
如同以往幾次的出差
都需要透過SSH tunnel連回我的主機
以避免偉大的防火牆擋掉我想看的網頁

幾個我的朋友與同事反應
透過SSH tunnel可以用
但是facebook不能上?!

前兩次去廈門跟煙台已經有初步的經驗
DNS會被加料
因此改用台灣的DNS Server或是Google提供的DNS即可
但遠端教我朋友設定後依然不行?!

這次出差發現的確有這樣的狀況
根據nslooup查詢DNS
www.facebook.com回傳的結果都有回傳
但是跟我在台灣查詢的IP不一致?!

查了一下
據說目前的作法是
當碰到DNS查詢關鍵字網址時
謎樣的伺服器會直接回傳錯誤的IP

透過Wireshark分析封包證實了這樣的結果
我向Hinet的DNS送出查詢
收到三個DNS的回應
第三個回應 IP 69.63.181.16經過反查後確認是facebook的dns server
但前面兩個IP的反查卻查不出來

因為冒出了前面兩個回應
Windows會採用第一個結果
拋棄後面收到的回應
導致要連上facebook.com
永遠都是使用錯誤的IP

這兩個回應哪裡來的並不清楚
在神聖祖國 什麼鬼事都有可能發生


處理的方法有幾種
  1. 延後DNS查詢的時間,強迫OS取後面的結果。
  2. 我沒看到具體作法怎麼做,而且這樣做感覺不是最佳解決方案?
  3. 直接寫入hosts,避免DNS查詢被污染
  4. 缺點是,你必須要手動把dns紀錄加到hosts裡面,不夠彈性
  5. 透過SSH tunnel local bind的方式,將DNS查詢透過SSH tunnel經過跳板送出去。
  6. 實作的方式為SSH -N -L 53:168.95.1.1:53 username@hostname bind port 53是因為,Windows只支援DNS預設Port 53 實際測試的結果,nslookup均沒有回應...不知道為啥咧= =
    之前有時間的時候,找了資料實際測試一下,基本上SSH Tunnel開啟的Socks proxy是TCP proxy,不吃UDP封包,因此走UDP的DNS查詢不能直接經由Socks proxy轉送 需透過netcat或sopcat實現udp-tcp的fowarder,實際測試後的確是可以使用的,但實在是有點麻煩阿Orz 建議還是直接使用下面提到的方法,Socks proxy的remote dns lookup,要來的方便快速阿XDDDD
  7. 透過Socks proxy的remote dns lookup功能,將DNS查詢交由socks proxy處理
  8. 這個需要Socks5 proxy才有支援,幸好,SSH tunnel開啟的socks proxy本身就有支援 接著是client端的設定 IE...不支援 Chrome,根據找到的資料,Chrome必須要安裝addon - Proxy switchy, 在設定Socks Proxy時設定為Socks V5 但我設定之後測試的結果是... 沒用= = Firefox,Firefox本身在設定中已經包含了Socks proxy remote dns lookup的設定,預設是Disable的 將這個設定打開之後,還是沒用= = 根據找到的資料,安裝Addon - FoxyProxy 設定Proxy時,將Socks proxy指定為Socks V5即可 測試結果...正常了~:D

以上,給有需要的人做個參考:D

麥香奶茶

在台灣常見的麥香奶茶有幾種...

600mL PET包裝
建議售價為25元
250mL 利樂包裝
一般是量販店整箱出售
在雜貨店或是美聯社也偶爾會看到有販賣
售價大約在8元左右
450mL 利樂包裝
建議售價由17元漲至25元
我不喜歡這個包裝
因為他的配方太甜...
350ml 利樂包裝
建議售價為15元
口味最接近10元的麥香奶茶

355ml 鐵罐裝
常見於便利商店的熱罐
但甜度跟450ml的麥香奶茶接近
也不是我的菜
300ml 利樂包裝
建議售價10元
我的最愛
以CP值來說,比上述的各種包裝都要划算
自從高職以來,每天一瓶
當初有個CF讓我印象很深刻...
一對看起來像是小情侶
走在森林裡的鐵路上
女生手上拿著一瓶麥香奶茶
男生趁女生不注意偷喝了女生手上的麥香奶茶

一個兩小無猜的畫面
那個時候的我心想
會不會有一天我碰到一個愛喝麥香奶茶的女孩
我偷喝她一口奶茶的時候
女生會揮揮粉拳表達抗議
而不是對我飽以老拳把我扭送警察局咧

當然 那是年輕時對於戀愛的憧憬
 不過在我下課回家的路上 我總是會再桃園火車站後站轉角的7-11買一瓶奶茶
 那間7-11以經不在了
 雖然說 店員很可愛
 不過那就是題外話了


這次到深圳出差
 發現了麥香奶茶大陸版~~~~~~~
 當下就抓了一手回宿舍
 據同事的說法 我看到麥香奶茶的時候眼睛一亮阿~~~

 不過喝了之後
 感想是
 我還是喜歡台灣的10元麥香奶茶~

2011年10月10日 星期一

Ubuntu 10.04 samba server poor performance

samba一直是個好物
讓Windows可以透過網芳直接連到linux上撈資料

上次伺服器因為我手賤被我弄掛之後
重新整理一下讓它重生了
現在上面就跑SSH,遠端的操作跟跳板用~
另外就是跑transmission掛BT
既然有台機器要24H開著,那掛BT的重責大任交給他也是很合情合理的...

也因為要撈檔案出來
所以我裝了samba service在上面以便可以直接走網芳
但撈檔案的時候發現
在LAN裡面,100Mbps的ethernet
我居然抓檔案只有200KBytes ~ 300KBytes的速度
這個速度抓1080p的影片,比我從BT上抓還要慢...

找了一下資料
首先是samba的optimize
在smb.conf裡面[global]區塊
加入
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536
修改後sudo service smbd restart重新啟動服務

這個時候更糟了,居然連不上server
查了一下找到一個bug report
https://bugs.launchpad.net/ubuntu/+source/samba/+bug/554094
反正就是說 10.04的smbd有bug
已經修正了!

下apt-get update更新source list
接著apt-get upgrade更新所有套件
更新samba的時候,因為有修改過smb.conf,
會提示要合併或是要修改smb.conf,所以建議先更新samba之後再修改smb.conf,省點麻煩...

重新啟動server
搞定! 速度正常了~
現在撈檔案的速度最快大約7MBytes ~ 8MBytes

2011年9月15日 星期四

kscope under ubuntu

在NB上的Ubuntu 10.04安裝KScope
因為Ubuntu 9.04之後的Source把KScope拿掉了
所以需要回頭安裝舊的package

link:
i386:
kscope_1.6.0-1_i386.deb
amd64:
kscope_1.6.0-1_amd64.deb

另外還需要 libkateinterfaces 與 libkateutils 這兩個library
下載kate的package
手動將這兩個library複製到/usr/lib
i386:
kate_3.5.9.dfsg.1-6+lenny1_i386.deb
amd64:
kate_3.5.9-0ubuntu6_amd64.deb

網路上將library抽出來的link掛了
所以我自己包了一包放在dropbox,有需要請自取~
i386:
libkateinterfaces.so.tar.gz
libkateutils.so.tar.gz
amd64:
libkateinterfaces.so_amd64.tar.gz
libkateutils.so_amd64.tar.gz

2011年8月2日 星期二

DNS代管由dot tk改為ZoneEdit

自從EveryDNS被DynDNS收購後,
收到信通知要轉到DynDNS去,
但在DynDNS嘗試設定了一下,
界面實在不夠親切,所以改回用Dot TK本身提供的DNS代管服務...

最近這一個禮拜開始發現DNS不時會掛掉,
Dot tk的DNS service實在是有夠掉漆的...Orz

昨天晚上survey了一下,
最後決定採用ZoneEdit的免費DNS代管,
頗特別的一點,所有的Service都要下Order,
所以我下了一個Order買DNS Management 9年,
費用是0元...XD

早上看了一下,DNS陸續生效,
看來應該是正常了...

2011年7月10日 星期日

mm inch mil online converter

畫Layout臨時需要,
找了一下沒有網頁版本,
隨手寫了一個:)

mm, inch, mil 單位轉換
convert between mm, inch and mil


mminchmil

2011年5月19日 星期四

我在廈門的日子...翻牆真辛苦...

人生的第一次出差,
第二次出國,我來到了廈門...

這裡很特別...
在翔安新區,類似新規劃的重劃區,
在這裡,馬路很寬...
所以計程車在一般的馬路上居然開到80~90kmh!?
師傅...你不要命我還想要...(在這裡習慣叫司機做師傅)
按喇叭是家常便飯...
因為路上可能有三三兩兩的行人走到路中心....
可能有不戴安全帽的機車騎的很慢騎在快車道上...
可能有逆向的箱型車開在快車道上...
可能有逆向的機車也騎在快車道上...!?

飯店的電視頻道有撈中視跟華視的訊號,也只有這兩台...
因為NTSC轉PAL,正常來說應該是畫面會比較小...
(NTSC有525條掃描線,PAL有625條掃描線)
但是中視跟華視的畫面居然是被放大了(怎麼轉的阿= =),
所以字幕都被截掉看不到= =

飯店的網路很慢...很爛...
原本開SSH Tunnel連回自己的Server,
沒想到連DNS都被加料,一堆domain都被擋掉....
如果你在中國上網,連某些網站發現網站拒絕回應的特別快...
(一般網站掛了總是會等上一下子才會拒絕回應)
那八成就是被河蟹掉了...

所以設定SSH Tunnel當作Proxy使用,
除此之外還需要安全的DNS Server...
(原先就是用飯店的,一堆網站不能看...)
原本打算在自己的Sever上開DNS Cacher(Forwarder)
但查到Google的DNS(IP很好記,但沒用到的時候基本上也不會記得XD)
測試了一下都正常,就改用Google的DNS了。

改了之後咧,連MSN的連線都正常多了...
(媽的個逼逼蛋咧,連MSN也擋是怎樣....)

以上作個紀錄:)

2011年3月24日 星期四

如何將Outlook2003變成Gmail風格?

As title,
上班時碰到一個問題,光是找信就找了半天,
即使有Google desktop,卻常常找到的是不知道回了幾百次的回信,
特別是客戶回信也很懶,常常用A問題的回信直接回信問B問題,
這個時候就很想念Gmail的排序方式,
以會話群組的方式將信排列顯示,
這樣一來一個Topic就一次列出來,不用再找信找半天了...

以下以Outlook 2003示範,Outlook 2007應該也適用,2010好像不需要這麼麻煩?

首先,我們需要將寄出的信自動複製到收件匣一份,透過設定規則的方式實現。
在Outlook的工作列,工具→規則與通知。

新增規則後,選擇"從空白規則開始",傳送郵件後進行檢查

條件,經指定帳號寄出的信件(這裡通常是Exchange Server)
如果不是為了Microsoft的Exchange server,那用Gmail不就好了=>=
動作,傳送郵件副本給"自己"
例外條件可以直接跳過,除非有什麼例外?XD

接著設定另外一個規則,將自己的信件標示為已讀取,
  1. 選取郵件應檢查的時機,當郵件送達時進行檢查
  2. 條件,寄件者為自己
  3. 動作,標示為已讀取
這個時候我們應該有兩個規則,如下圖...

傳送郵件時傳一個複本給自己
收到寄給自己的信時標示為已讀取
設定規則後請仔細對照規則描述是否跟我的一樣...
接著請手動把寄件備份複製或是移到收件匣請自行評估若使用舊PST檔(有2G限制)可能會導致資料夾檔案爆炸XDDDD

這個時候,我們的收件匣應該就會很豐富,除了原先的信件以外,還包含了一大堆我們寄出去的信件,接著設定檢視方式。

在Outlook工具列,選擇排列→自訂

群組依據請選擇交談主旨,遞增是第一封信在上面,遞減是最後一封信在上面
排序請設定為收到日期(遞減)

大功告成,這個時候顯示應該就跟Gmail的風格類似,以會話群組將信件分組,
會話群組的排序以最新的信件日期排序。

以上就是將Outlook 2003設定成以會話群組排列的說明,感謝各位:)

2011年3月18日 星期五

Blogger Search and Replace

Well, I've transfer my blog couple times,
so it's has some image link from other static web hosting,
but someday, I got a mail that told me the service has expired,
because my adsl account has expired long time ago.

So, I thought, maybe I can move all file to other web hosting,
and replace all string in blogger.
then I try to find a solution or any way to replace a string in all article,
but I can't after I google it.

So I try to wrote it.

refer to Blogger API Developer's Guide: Python

Source:
def ReciveAll(self):
# Request the feed.
query = gdata.blogger.client.Query(max_results=9999)
feed = self.client.get_posts(self.blog_id ,query=query)
return feed

def SearchAll(self,str):
result = []
feed = self.ReciveAll()

for entry in feed.entry:
if (string.find(entry.content.text, str) != -1):
result.append(entry)
return result

def UpdatePost(self, entry_to_update):
return self.client.update(entry_to_update)

def main():
global email
global password

"""The main function runs the BloggerExample application.
NOTE: It is recommended that you run this sample using a test account.
"""

email = easygui.enterbox('Email:','Login')
password = easygui.passwordbox('Password:','Login')
sample = BloggerExample()
while 1:
array = []
menu_array = ['Search','Exit','Search and replace']
menu_choice = easygui.choicebox('Main menu', 'Main menu', menu_array)
#select = raw_input("1:Search\n2:Search and replace\n3:exit\n")
if menu_choice == 'Search':
#user_input = raw_input("Search:").decode(sys.stdin.encoding)
user_input = easygui.enterbox('Search:','Search')

results = sample.SearchAll(user_input)
for entry in results:
array.append(entry.title.text.encode("utf8"))

entry_choice = easygui.choicebox("test","test",array)
while(entry_choice!= None):
re_split=re.compile("[<>]")
for entry in results:
if entry.title.text == entry_choice:
line_array = re_split.split(entry.content.text.encode("utf8"))
line_array_contain = []
for line in line_array:
if line.find(user_input.encode("utf8")) != -1:
line_array_contain.append(line)
easygui.choicebox("Search Result","Search",line_array_contain)
break
entry_choice = easygui.choicebox("test","test",array)

elif menu_choice == 'Search and replace':
#src = raw_input("Search:").decode(sys.stdin.encoding)
src = easygui.enterbox('Search:','Search and Replace')
#dest = raw_input("Replace:").decode(sys.stdin.encoding)
dest = easygui.enterbox('Replace:','Search and Replace')
if easygui.ccbox():
results = sample.SearchAll(src)
for entry in results:
entry.content.text = entry.content.text.replace(src,dest)
#print entry.content.text
sample.UpdatePost(entry)
#print entry.title.text + "-> done"
easygui.msgbox(entry.title.text + "-> done")

elif menu_choice == 'Exit':
break

if __name__ == '__main__':
main()

GUI Version:
Source: http://dl.dropbox.com/u/3357679/Blog/Src_Blogger_search_replace_gui.7z
Prebuilt binary: http://dl.dropbox.com/u/3357679/Blog/Blogger_search_replace_gui.7z

Console Version:
Source: http://dl.dropbox.com/u/3357679/Blog/Src_Blogger_search_replace.7z
Prebuilt binary: http://dl.dropbox.com/u/3357679/Blog/Blogger_search_replace.7z

because that's practice program(it's mean beta release, use it at your own risk!)
please backup or export the blog before.
I've try replace in English and Traditional Chinese,
it's work, so, it's should support multi language.

Finally, it's worked!
but I found that maybe I need modify article by manually,
because it's look like upload image to Picasa will be much better?

2011年1月23日 星期日

How to set SSH tunnel, dummy way, step by step...

應多多的需求,
來寫篇SSH Tunnel的教學,
以最基本最基本的為主,先不考慮任何進階的用法。

架構如下
一般來說經由正常方式連線,中間容易被第三者竊聽,除非是經過HTTPS等加密的Protocol
如果像是MSN或HTTP則是可以一覽無遺,
例如firesheep則是在未加密的無線網路環境竊聽http packet,
還順便幫你整理好讓你不用去看packet structure。



透過Tunnel連到Internet,分成兩個部份來看
Client到SSH host端經過加密,因此中間的第三者唯一能看到的是你連線到SSH Host
但他無法得知你中間到底傳什麼?
但SSH Host以及SSH Host到Internet之間還是可以竊聽,
端看你對於SSH Host的信任程度。
因為我們只要避開已知的竊聽者:)


Requirement:

  1. Putty (SSH Client, http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe)
  2. SSH Host
執行Putty的畫面,Host Name填入SSH主機的位址,
Saved Sessions填入名稱,以便之後可以直接連線不用再設定一次,但還沒設定完...
Tip: 在Host name輸入帳號@主機位址,代表要直接以指定帳號登入,登入時就不會再詢問帳號

在左邊有列出各個設定,選擇Connection→SSH→Tunnels,就會看到如上的頁面,
Source Port是指在本機的Socks Server開啟的Port,不清楚是什麼就填入8080
Destination空白,下面的選項填入Dynamic,代表我們需要一個不指定目的地的Socks server
設定後在左邊的分類,回到第一頁的Session,並在前一步驟輸入名稱的右邊按下Save
下次使用直接點Session name就可以使用了
按下Open後會提示問帳號跟密碼,如果前面設定Host name時有指定帳號,這裡就不會再詢問帳號
這張圖片中我把許多資訊拿掉了,因此很多地方是黑的XD
登入後,Putty就可以先縮小放著不管了,除非你有要做其他操作?
接著開啟命令提示字元,輸入指定Netstat -an
這個指令會列出目前這台電腦的所有連線,在這當中尋找一個127.0.0.1:8080
後面跟著IP為0.0.0.0:0 狀態為Listening
代表已經成功讓Putty變成Socks Server,並且已經在傾聽狀態

接著,設定需要經過Socks Server的程式
首先設定IE的Proxy,許多Client的Proxy有個自動取得,即是refer到IE的Proxy設定
開始→控制台→網際網路選項
或是IE的工具列→工具→網際網路選項
若瀏覽器是Chrome,選項→進階選項→變更代理伺服器設定

切換到連線分頁

連線→區域網路設定
勾選"在您的區域網路使用Proxy伺服器"
位址跟連接埠空白,接著點進階
在Socks的欄位,位址填127.0.0.1,連接埠填入8080
127.0.0.1是指本機的意思,因為我們在同一台電腦上開啟Socks Server
8080則是在前面設定SSH tunnel時開啟的連接埠
接著設定MSN

工具→選項→連線分頁→連線設定

MSN的Proxy可以設定Http Proxy或Socks Proxy
在更新MSN前印象中MSN可以直接走IE設定的HTTP Proxy
但更新後好像沒有辦法?因此還是要獨立設定SOCKS Proxy
設定方式跟前面類似,設定好之後可以按下測試看看是否設定正確
設定之後,我們可以藉由Netstat來看看連線的狀況
一樣開啟命令提示字元,打netstat -an
若有與127.0.0.1:8080建立連線就代表正常
或透過小工具
Sysinternals出的TCPView
不過Sysinternals被Microsoft買下來了:~
http://technet.microsoft.com/en-us/sysinternals/bb897437
圖片中可以看見不同的程式透過127.0.0.1:8080連線出去

以上,就是最基本的SSH Tunnel設定,進階版則包括以下設定

  1. Putty設定自動登入(設定Putty的Private Authentication Key)
  2. 利用plink在command line模式直接連線
  3. 搭配wifi manager的功能實現不同網路直接建立Proxy並且更換設定(例如像我設定好連上公司無線網路後,自動開啟連線建立Socks proxy,並切換Proxy到指定proxy)
以上,有需要再自己想辦法XD

2011年1月13日 星期四

Acer Stream 入手!~

refer: http://www.eprice.com.tw/mobile/talk/?prod_id=3578&tid=4515606

前一陣子花了12K買了二手的Acer Stream
過了一個禮拜看到PTT Mobilesales版有人抽獎抽到全新的賣12K(哭)~
買東西原本就是運氣運氣,所以倒也沒太放在心上...

除了真的很方便之外
倒是沒有太多的心得= =

買來之後兩三天就找文章把手機給Root了
只因為我受不了上面綁的一堆遠傳的軟體,
我要砍卻砍不掉...
重點是我是中華電信用戶...完全沒辦法使用Orz

裝了幾個小遊戲,也有裝Angry bird來玩看看,但是那個遊戲好空虛= =
一整個不能理解為什麼這個遊戲會這麼熱門??

Lunaterm,上bbs用的軟體,身為一個鄉民手機裡面準備一個telnet client也是很合理的,
也許哪天想到再來裝個ssh client吧...

Google Map更新到5.0,向量圖資讓地圖下載快多了:)
Dropbox,目前在兩台Desktop、一台Laptop還有我的手機都裝了,作業系統橫跨Windows、Ubuntu跟Android...Dropbox的Client的確是作的不錯~
Chrome to Phone...這個也是個很方便的小工具,在PC上看到什麼東西要丟到手機上都很方便...
條碼掃瞄器...這應該就不用解釋太多了...支援一維條碼跟二維條碼

Android整合了Google的各項服務,重點是可以Check Exchange的mail,即使出門在外我也可以即時的確認公司的信箱~

心得
有一支Smart Phone真的是方便不少:D

how do i fix an error with libc6-dev-armhf-cross in linux mint upgrade

先前升級公司用的工作機碰到這個問題 Log就不貼了,我手邊也沒有,可以參考下列連結 https://askubuntu.com/questions/1079797/how-do-i-fix-an-error-with-libc6-dev-armhf-cross-in-ubuntu...