JpcapCaptor.getDeviceList()可以取得主機上的所有網路介面的資訊,以陣列NetworkInterface[]回傳。藉由這個陣列可以取得網路卡名稱、IP位址等資訊。
NetworkInterface[] interfaces = JpcapCaptor.getDeviceList();
for(int i = 0; i < interfaces.length; i++)
System.out.println(i + ": " + interfaces[i].name + "(" + interfaces[i].description +")");
System.out.println("Datalink: " + interfaces[i].datalink_name + "(" + interfaces[i].datalink_description + ")");
System.out.print("MAC: ");
for(byte b : interfaces[i].mac_address)
System.out.print(Integer.toHexString(b & 0xff) + ":");
System.out.println();
for(NetworkInterfaceAddress addr : interfaces[i].addresses) {
System.out.println("Address: " + addr.address);
}
}
輸出結果如下:
0: eth1(null)
Datalink: EN10MB(Ethernet)
MAC: 0:17:31:25:6f:ed:
Address: /140.120.15.173
Address: /fe80:0:0:0:217:31ff:fe25:6fed
以下略
2008年1月8日 星期二
Jpcap - 列出系統的網路介面資訊
2008年1月7日 星期一
編譯多個source code
將函式的prototype的宣告以及一些constant的定義寫在另一個header檔是程式常用的技巧。自行定義的header必須以雙引號include進來,如:
#include "selfdefined.h"
至於如何編譯多個source code,以下以GNU C compiler gcc作說明:
假設有以下檔案:main.c selfdefined.c selfdefined.h
# gcc -c main.c selfdefined.c
會產生兩個object file
# gcc -o main main.o selfdefined.o
連結兩個object file產生main的執行檔
如果後來main.c做了更改,我們只須重新編譯main.c即可
# gcc -o main main.c selfdefined.o
2008年1月5日 星期六
24歲了
原子結構
基本粒子
原子(atom)是由原子核(atomic nucleus)和電子(eletron)構成,而原子核是由中子(neutron)與質子(proton)所組成。
事實上,所有的基本粒子可以由兩種型態的粒子構成:
- 夸克(quark)
- 輕子(lepton)
每一種型態的原子可以由電子數及質子數來和其它的元素作區別。例如氫原子有一個質子和一個電子,而氦原子則有兩個質子、兩個中子和兩個電子。
原子序
所有元素可以依照原子序排列在化學週期表上,而原子序就等於原子核裡的質子數,在一個平衡狀態的原子裡也等於電子數。
電子能階
原子核外有一層一層的能量軌域,電子只能繞行在某個軌域上,離原子核距離較近的電子,其能量比離原子核距離遠的電子還要低。每個離散的距離(軌域),可以對應到某一個能階(Energy level)。每個能階都能視為一種Shell,每一個Shell都有最大可允許的電子數量。可以用以下的式子來計算:
Ne = 2n^2
Shell 1: 2(1)^2 = 2 (可容納2個)
Shell 2: 2(2)^2 = 8 (可容納8個)
...
每一層都要填滿才能到下一層,因此只有Valence shell不必完全填滿。
價電子 (Valence Electrons)
離原子核愈遠的電子擁有較高的能量,因此位於最外層的Shell的電子最不被原子核束縛。最外層的Shell又稱為Valence shell,而在Valence shell的電子則稱為價電子。
離子化 (Ionization)
當一個原子吸收到能量,如熱能或光能,則電子的能量會提昇。因為價電子擁有較高的能量且較不被原子核束縛,所以他們很容易跳到更高的軌域。因為價電子已在最外層,所以當取得足夠的能量時,便會完全脫離原子核束縛。而由於失去一個電子,則此時原子的質子數變大於電子數而帶正電。這種失去價電子的過程稱為離子化,而帶正電的原子稱為陽離子。脫離原子核的價電子稱為自由電子,當一個自由電子失去能量且掉入另一個原子的Valence shell,則這個原子會變成帶負電,稱陰離子。
2008年1月2日 星期三
迴圈小技巧
從PTT上看到別人的小技巧,和大家分享一下。
若程式裡的迴圈是用來計數的話
ex.
for(i = 0; i <= n; i++)
s = s + i;
可以做以下的修改
for(i = n; i; i--)
s = s + i;
如此,編譯成組合語言時,會少一個cmp的指令。
修改後的組合語言,會用jne來判斷,若i變成0,會將flag設為0。
小技巧的確是能將效率提升,然而卻可能讓程式變的不可讀,有利有弊。最佳的情況當然是compiler夠聰明的話,程式寫作就可以輕鬆多了。
2008年1月1日 星期二
跨年 - 迎向2008
以往的跨年總是待在家裡,不然就是待在宿舍。然而,這次和以往不同,和一群國中的好朋友一起迎接2008。阿佑、小武、蒜督、昱銓、我以及兩位小武的朋友如芬、詒真(如果沒記錯的話!)
寒冷的夜晚,當然少不了火鍋,於是找了一間吃到飽的火鍋店大吃一頓。阿佑剛好是元旦寶寶,蒜督原來準備了小禮物送給了他,令人驚奇的是,我也有一份,雖然離生日還有幾天才會到,感覺整個心都熱了起來。
吃完火鍋都快十一點了,再晚就看不到101煙火了,於是就先去接小武的兩個朋友,然後就前往辛亥隧道旁的一座山前進。時間一分一秒的流逝,最後我們就把目的地改在辛亥路三段上,這個路口也是擠滿了人,看來應該也是不錯的地點。時間是十一點四十五分。
五、四、三、二、一,Happy New Year!101煙火一開始的瞬間真是漂亮,現場看和電視看就是不太一樣,不過,美中不足的是後來的煙火都被煙遮住了。
看完煙火後,小武提議要到五股憲兵學校後面的一座山看夜景,所以又開始了長途的旅程,冷死我了。費盡千辛萬苦終於到了,可惜沒相機,不能拍下來。
回到家的時候已經四點多了,今年的跨年真是特別!
