慢了半拍才看雙瞳 =_=
這兩天在 AXN 看到雙瞳,雖然都是斷斷續續的看,不過也是看的七七八八,大致能了解劇情了~~
相當不錯的一部片,嚴格來說這部片不能算是鬼片,應該算是懸疑推理片~~
不過把道家說的有點不堪~
整體的感覺與節奏都掌握的很好~值得一看~~
有興趣的人可以找一下 AXN 節目表來看看~~
簡介:
http://movie.kingnet.com.tw/channelk/doublevision/
官方網站:
http://www.doublevisionmovie.com/不過這裡看起來已經倒了~~@_@
搬家前後
在五月初的時候搬了家,搬到自己的房子~~
感覺不錯~~
C的故事
寫於 1999/8/12
=====
某日我和C走進一家泡沫紅茶店閒扯淡,聊了不久,我的臉色突然變的凝重,
和C說:”把你的左手伸出來”
在C的左手伸出來之後,我伸出我的左手握住她的左手。
接著又伸出我的右手握住她的左手。
然後說”我現在要說一句很霹靂的話喔!那就是我愛你”
這時突然爆出了笑聲
C笑的很開心的說,”你又在耍寶了喔”
我也陪著笑,但心裡卻在想”老天,什麼時候你才會相信我不是在耍寶?”
失落之後的期盼
寫於 1999/9/5
====
週一的早晨,坐到我的座位上,突然發現少了些什麼…
於是我很努力的尋找是什麼讓我有了失落感…
在一一清點週遭之後
沒錯,是P
P已經不在我的身邊了
心裡感到些許的失落~~
我只能對著電腦螢幕發呆
期盼電腦螢幕能給我些什麼來安慰我
只是它從來都不能給我些什麼
它只能給我一堆圖形和文字罷了
期盼等於發呆~~
“鈴…鈴…鈴…”的聲音打斷了我的發呆
只好採取必要的行動來遏止它
“喂….我是XXX,你好”
“……………………………”
“喔~~好,我會處理,嗯~,就這樣,881″
在遏止它之後
看了看時間
也該是開始工作的時候了
我開始我的例行公事->製造無止盡的鍵盤敲打聲以提醒老闆”我有在工作!!”
沒心的人
寫於 1999/9/5
=====
意念突然急速的飛竄起來,難以遏止~
“嗶…自動防護裝置啟動…”
線路開始將亂竄的意念導向到心臟的部位
於是心臟急速的跳動,似乎無法承受這麼多的意念急速的湧進來
“嗶…開始切斷與心臟相連的線路…”
一條條與心臟相連的線路都被切斷了
身體與心臟脫離了
成為兩個獨立的個體
我成為一個沒有心臟的人了
那麼下次,我該切斷些什麼來阻止我的意念急速飛竄呢??
我想應該是身體裡的器官吧!
這樣子應該比較不會嚇到人~
或者是毛髮,不過也許半年以後會變成沒毛的人
腦子突然發現這個方法不是很好
於是請嘴巴說:”真是糟糕呀~”
但是心臟已經切除掉了呀
還真是糟了一個大糕
只好認真的當個沒心的人
S的故事
1999/9/9 寫的作品,好像沒貼過…
=====
S在公司裡算是一個相當出色的人~
她有著娟秀的臉龐,烏黑長及腰的頭髮,二十來歲的年紀,
在一般男人的眼裡算是美女一個,因此她的身旁始終有追求者.
正所謂”窈窕淑女,君子好逑”,這倒是相當正常.
只是每隔2~3個星期,追求者就換了一個人.
我一直感到很好奇,但卻也不敢詢問,畢竟,他人的感情生活,我有什麼權力去干涉呢?
慢慢地也和她越來越熟悉了,才在一些談話間聊到,但她通常也不作正面的回答,
只是露出淡淡的微笑.看到這種女人獨有的微笑,我也就不再提起.
直到後來有一次,在公司的聚餐中,她不小心喝醉了,
難得一次沒喝醉的我被大伙指派為護花使者,護送她回家去.
扶著她走出餐廳,看到外面一片寂靜,令人心靜不少.
還保有一絲絲清醒的她,順利的坐上我機車的後座
為了怕半路掉人,我特地小心地囑咐她:”要抓牢喔!”
然後我緩緩的騎著機車,往她家的方向前進~
騎在寬寬的路上,吹著微微的風,真的是很舒服~
完全不同於白天馬路上的擁擠與煩吵
沒想到晚上騎車竟是一種享受
啊!紅燈了,於是我停下來~~
這個時候,S突然下車,往附近的公園走去,坐在公園的鞦韆上…
我當然也趕緊停了車,跟著她,也坐在她旁邊的鞦韆上
我問她怎麼了,她沒有回答我,只是靜靜的坐著.
我倆就這樣靜靜的坐著,讓溫柔的月光灑在身上…
她突然開口:”我和我的初戀男友第一次約會就是在這裡…”
“那一夜,他擁我在他懷中,吻了我,並且互相約定,我們聊了好多好多…”
“那夜之後的幾天,他突然失去蹤影,我拼了命的和他聯絡,但怎麼樣也聯絡不到,”
“好像世界上從來就不存在這個人一樣.”
“我非常的失魂落魄,整天都想著他,記著他.”
“甚至那一夜的每一字每一句.”
“就這樣過了一個月,他突然出現,告訴我說,我們分手吧!”
“我聽到這句話,很意外地,我並沒有歇斯底里地大哭大叫.”
“我只是默默地離去…”
“就像村上所說的「西伯利亞歇斯底里」,腦袋裡似乎有什麼東西斷掉一樣.”
“我再也不能相信男人這種東西.”
“於是我暗自發誓,我再也不要承受愛情的痛苦,只要愛情的甜蜜.”
“因此在我享受完戀愛的幸福之後,總是我先提出分手,也因此你們才會看到我的旁邊總是不同的男人.”
在她講完後,四周又恢復一片靜默…
Unicode 與 ISO10646
主要是參考這兩篇文章:
http://www.ascc.net/nl/89/1610/02.txt
http://www.ascc.net/nl/89/1611/02.txt
以下主要是做圖片的補強與一些說明補充.
洗手作羹湯
昨天請朋友來家裡吃飯,所以自己下廚,作了菜…
菜單如下:
蛤蜊絲瓜
材料:文蛤 8~12 顆,絲瓜一條,薑切絲,鹽半匙,米酒一匙
作法:先讓文蛤吐砂,刷一刷;絲瓜去皮切扇形片;一起放到烤盤,用鋁箔包起來.讓烤箱預熱,再用 180 度烤約 20 分鐘即可.
結果:可以吃…
檢討:烤箱太小;鋁箔包的不好;文蛤放太多,蠻多都沒開…
炒青菜
一道是空心菜炒肉(由太太下廚),另外一道則是炒紅菜.
結果:都不錯.
涼拌豆腐
材料:豆腐,醬油,柴魚片
作法:豆腐打開把水瀝乾,放到盤子裡,淋上醬油,灑上柴魚片,ok~
三色蛋
材料:雞蛋 2,鹹蛋 2, 皮蛋 2,鹽一匙,味精0.5匙,麻油一匙,太白粉一匙.
作法:蛋打散,加約一碗水,鹹蛋皮蛋切塊,混勻之後,加入調味料.加上保鮮膜,弱薇波九分鐘(其實用蒸的應該也可以).
結果:失敗.
檢討:沒放水,應該是要像蒸蛋一樣,要加水才是,不放水會有點焦掉…
蒸鱈魚
材料:鱈魚,豆鼓少許,薑絲,醬油,其他調味料(想加什麼就加什麼吧)
作法:丟到一起,放到電鍋蒸即可.記得醬油要先放到碗裡,與其他調味料調一調再淋到鱈魚上.
結果:勉強可以
檢討:醬油放太多,導致鱈魚味道太重.肉質不好,可能是因為在大賣場買的緣故.
木耳炒魚板
材料:木耳絲,金針菇,魚板,芹菜(以蔥段代替亦可),辣椒
作法:辣椒先爆香,然後把材料一起放下去炒,最後加鹽.
結果:辣.
檢討:可能是因為辣椒太辣的緣故.
枸杞蝦
材料:蝦子,枸杞,米酒
作法:先拿枸杞泡米酒,然後再淋到蝦子上,丟到電鍋裡去蒸…
結果:尚可
檢討:蝦子吃起來不好吃,應該是需要再一些處理,比如泡米酒或是佐料之類的.枸杞沒什麼味道,或許是因為泡米酒過久之故…
冬瓜湯
材料:冬瓜,排骨,薑絲,鹽
作法:先燉排骨,滾了以後,依序放入冬瓜與薑絲煮熟,最後調味即可.
結果:尚可.
檢討:忘記放鹽.
其他還有一些沒做的菜,做法也貼出來如下:
酸菜炒雞胗
材料:雞胗切花,酸菜切片,蔥切段,薑絲,辣椒少許,胡椒粉
作法:起油鍋,爆蔥,雞胗快炒,依序加入薑絲,辣椒,酸菜,最後加麻油及胡椒粉,鹽,醋.
奶油玉米火腿
材料:玉米粒,火腿丁半碗,奶油兩匙,黑胡椒
作法:下奶油,火腿丁拌炒,再加入玉米粒及黑胡椒即可.
監看網路封包程式設計概說
以前同事寫的文章.
作者: 邵文琳
前一個禮拜花了不少時間在看網路封包方面的程式設計 ..覺得十分有興趣.
感謝charles 和 ellery 的幫助 . 讓我觀念比較清楚 …
在這裡我把我這一個星期的學習心得寫下來.
讓大家以後若有機會寫到類似程式時, 可是事半功倍 ..
網路程式設計方面相關資料很多 . 但是都是對比較上層的tcp,或udp的應用在做介紹.
對於網路層和datalink層面則著墨較少 .
所以”對我而言” 學習起來比較困難. 希望寫下這個對大家會有幫助.
一個網路封包監看程式 . 說穿了 只有四個重點:
第一 . 開啟一個可接收raw packet 的socket .
一般我們開始socket接收tcp或udp的packet 時, 我們收到的內容就直接是資料內容 .
kernel 己經幫我們把ethernet header 和 ip 或 arp header 都拿掉了.
但是在寫網路封包程式時, 我們需要header . 因此我們在開啟socket 的時候,就可以針對我們要收集的封包總類做過濾. 要求接收到的資料裡要包涵完整的封包標頭檔…
第二 . 有條件的接收封包和無條件的接收封包.
網路卡只會接收到ethernet header 的target mac 是自己的mac 時, 或接收到TARGET MAC 為 ff:ff:ff:ff:ff 的封包, 或是multicasting 的封包(也就是target ip是224開頭的封包 . 這種情況叫做 nonPromiscuous . 當我們要監看網路封包時,希望收到的不只是broadcast 或是 multicasting 或是自己的封包時, 我就要把網路卡設定成 Promiscuous . 如此一來我們就可以接到實體網路上的所有封包了…
第三 . filter 的設定.
當我們把網路卡設成 Promiscuous , 而且看到了所有封包header 時, 我們就可以依照我們自己的意思去過濾出我們想要的封包 . 可是一個問題來了 .. 網路上的封包那麼多.我們全都要一個個的去把它的標頭打開, 看看是不是自己要看的封包. 這樣做花的時間太長.以致於後面進來的封包都塞在buffer 裡, 等你一個個的檢查..我們需要一個filter 建立在硬體層和聯結層中建立一個filter , 先過濾出我們要的封包,再交由程式處理 . 這就是filter的功用.這種filter 是由bpf code 寫出來的! 不會寫bpf code ? 沒關係. 我們還是有別的方法把它變出來 ,,,,,
第四 . multiplexing I/O (blocking VS noblocking)
就如我們所知道的當我們在receving packet 時. 如果沒有資料進來, 程式就會等在那裡 ,這種情況叫做blocking , 但是有時候我們不想要無止限的等在那裡時, 郤又沒法把break 出來時,怎麼辦呢?使用signal 嗎? 另一種解決方式就是把資料流做unblocking.但unblocking 郤不能完成解決我的需求, 於是我利用到了 multiplexing I/O.接下來我在對以上四項做詳細解釋和範例:
第一 socket .
要如何開一個可以接收raw_data 的socket呢 ?
int sock;
// 開一個接收所有走ip protocol 封包的完整封包
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP));
// 開一個接收所有走arp protocol 封包的完整封包
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ARP));
// 開一個接收所有 protocol 封包的完整封包
sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_All));
// 在linux 下接收datalink 層的網路封包
sock = socket(PF_INET, SOCK_PACKET, htons(ETH+P_ALL));
PF_PACKET 支援兩個socket type:SOCK_RAW 和 SOCK_DGRAM, SOCK_RAW 會留下完整的 ethernet 標頭.SOCK_DGRAM 會去掉ETHERNET 標頭.但在linux 下使用PF_SOCK , SOCK_RAW 會有問題.最好是使用 PF_INET, SOCKET_PACKET 也可以留下完整的實體層的標頭.
第二 Promiscuous.
網路卡預設當然都是nonPromiscuous , 要變成 Promiscuous 必須對網卡做設定.在socket 己經open 下
#include <linux/in.h>
#include <linux/if_ether.h>
struct ifreq ifrq;
strncpy(ethreq.ifr_name,”eth0″,IFNAMSIZ);
ioctl(sock,SIOCGIFFLAGS,&ifrq);
ifrq.ifr_flags|=IFF_PROMISC;
ioctl(sock,SIOCSIFFLAGS,&ifrq);
若在打開之後,沒有在程式結束前關閉. 它就會一直打開哦 . 所以記得要關閉它.
strncpy(ethreq.ifr_name,”eth0″,IFNAMSIZ);
ioctl(sock,SIOCGIFFLAGS,&ifrq);
ifrq.ifr_flags&=~IFF_PROMISC;
ioctl(sock,SIOCSIFFLAGS,&ifrq);
第三. 設filter
filter 的設定主要是使用在實體層和連接層中間 . 用一種近似組語的bpf code 組成.寫起來挺麻煩的 . 所以我們直接使用tcpdump -dd 來產生的binary code 來用 .
for example:
tcpdump -dd ip dst 172.16.0.3
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 3, 0x00000800 },
{ 0x20, 0, 0, 0x0000001e },
{ 0x15, 0, 1, 0xac100003 },
{ 0x6, 0, 0, 0x00000044 },
{ 0x6, 0, 0, 0x00000000 },
tcpdump -dd ip src 172.16.0.3
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 3, 0x00000800 },
{ 0x20, 0, 0, 0x0000001a },
{ 0x15, 0, 1, 0xac100003 },
{ 0x6, 0, 0, 0x00000044 },
{ 0x6, 0, 0, 0x00000000 },
tcpdump -dd arp dst 172.16.0.3
{ 0x28, 0, 0, 0x0000000c },
{ 0x15, 0, 3, 0x00000806 },
{ 0x2 0, 0, 0, 0x00000026 },
{ 0x15, 0, 1, 0xac100003 },
{ 0x6, 0, 0, 0x00000044 },
{ 0x6, 0, 0, 0x00000000 },
其實這些code 的產生是有跡可找的..我就把下面程式碼的binary code 原始bpf pesude code 列出來,可以相對應比較看看
/*
udp and host 192.168.9.10 and src port 5000
(000) ldh [12]
(001) jeq #0x800 jt 2 jf 14
(002) ldb [23]
(003) jeq #0x11 jt 4 jf 14
(004) ld [26]
(005) jeq #0xc0a8090a jt 8 jf 6
(006) ld [30]
(007) jeq #0xc0a8090a jt 8 jf 14
(008) ldh [20]
(009) jset #0x1fff jt 14 jf 10
(010) ldxb 4*([14]&0xf)
(011) ldh [x + 14]
(012) jeq #0x1388 jt 13 jf 14
(013) ret #68
(014) ret #0
*/
我們可以依我們的需要去下command 給tcpdump -dd 幫我們產生binary code. tcpdump, 不但區分不同的protocol. 來源,目的地, even 標頭的第幾個byte,和要接收封包的大小, 都可以變化. 實在是太神奇了.
接下來我們要把code 整合到程式裡去 …
第四 . blocking VS noblocking multiplexing I/O
unblocking 最重要的意思是當有資料流進來時立刻就傳回. 當沒有資料流進來時, 也傳回0.於是我們就可以利用unblocking 和loop 來控制我們要的時間.
以下是程式的寫法:
(fcntl(fd ,F_GETFL) & O_NONBLOCKING) // 1 成功 0 失敗
但是把資料一點一滴的傳進來也並不是我們要的 . 我們還是希望傳進來的資料是一個個block 過的資料,只是當沒有資料進來時, 能夠不要永遠的等在那而己.這就是multiplexing I/O 的概念.當我們read 和recvfrom 一個 file handle 時, 我們可以設定如何沒有資料進來時我要等多久,就能回到程式繼續執行我們要做的動作.
以下是程式的寫法:
#include “sys/time.h”
#include “sys/select.h”
int sock;
struct timeval tv;
fd_set readfds;
sock = socket(…);
tv.tv_sec=1;
tv.tv_usec=0;
FD_ZERO(&readfds); // 清空file handle set.
FD_SET(sock,&readfds); // 加入一個file handle 到file handle set
FD_SET(xxx,&readfds); // 如果還有別的file handle 也要加入同一個
set做控制的話 ..
select(sock+1,&readfds,NULL,NULL,&tv); // 對 file handle set 設
定時間控制
if(FD_ISSET(sock,&readfds)){ // 依readfds的設定來看是否為
true , 依我們的
例出來說,程式會在這裡等上一秒鐘. 如果在這一秒裡有data流進來,
傳回true, 再交給recvfrom把data 接下來, 否則一秒鐘後傳回false
!
// recvfrom(….)
}
基本上把握這幾個主要的重點, 要變化出自己的sniffer 不是問題..剩下來比較討厭的就是把ip 轉成network address to host address..大小印地安,和 inetaddr, inet_addr, inet_aton, inet_ntoa …這些變來變去的死東西了.
.Net 的安全
ASP.Net 的身分驗證
以組態設定(web.config)即可,不必再使用以前的 cookie.
大致的 web.config 如下
<system.web>
…..
<authentication mode=”Forms|Windows|Passport|None”>
<form name=”your_form” loginUrl=”secure/login.aspx”/>
</authentication>
<authorization>
<allow users=”*”/>
</authorization>
<globalization requestEncoding=”utf-8″ responseEncoding=”utf-8″/>
…..
</system.web>
子目錄會自動繼承父目錄的 web.config.
一般子目錄裡的 web.config 只有設定
…..
<deny user=”?”/>
…..
程式裡面則是使用 System.Web.Security.FormsAuthentication 類別以及 Redirect 方法作轉向以及驗證工作.
類別的安全
某些類別有受到系統保護,當無法存取時,會丟出 SecurityException.
有兩種方法可以實現:
1.命令式,為權限建立 instance.
new FileIOPermission( FileIOPermissionAccess.Read, Path).Demand()
2.宣告式,以屬性的方式來宣告,比較固定
<FileIOPermission( SecurityAction.Demand, write=”/tmp”>
void foo()
{
}
簡單說,類別若有”類別Permission”的類別,就可以用”類別Permission”去控制類別是否可以被存取.
AssemblyInfo.cs evidence, 此部分與 gac_util 有關係
Permission Set, Security Policy
安全性原則,用 .Net 工具就可以管理其組態.
Role -> 類似群組
Identity -> 類似 user 帳號
Principal -> Role
PrincipalPermission
非結合 Windows 的方法
GenericIdentity MyIdentity=new GenericIdentity(“myuser”);
string[] MyStringArray={“Mgr”,”Developer”};
GenericPrinpal MyPrincipal=new(….);
結合 Windows 方法
AppDomain.CurrentDomain.SetPrincipalPolicy()
Thread.CurrentPrincipal 取得或給定
或先取 Identity, 再由 Identity取得 Principal
WindowsIdentity.GetCurrent(); 取得目前的 identity
=====
ASP.Net 的認證與控制
基本上都是在 web.config 中指定
<authentication mode=”Forms”>
<form name=”” loginUrl=””/>
</authentication>
mode 可以填 passport, none, windows
<authentication>
<allow users=”*”/>
<deny users=”aaa”/>
</authentication>