instanceof是用來判斷一個reference是不是屬於某一個類別或介面的函式。例:
System.out.print(new String() instanceof Object);
結果會回傳印出true,因為String是Object的子類別,所以函式會回傳true。
2008年1月13日 星期日
instanceof
2008年1月12日 星期六
Jpcap - 封包存入檔案或從檔案讀出
抓到封包後,除了即時處理外,也可以將封包存入檔案中,之後,再從檔案中讀出封包內容做處理。
存入檔案
先利用JpcapWriter.openDumpFile()開啟一個欲存入的檔案,再用writePacket()的函式寫入檔案,例:
JpcapCaptor jc = JpcapCaptor.openDevice(…);
JpcapWriter writer = JpcapWriter.getOpenDumpFile(jc, "capture.pkt");
for(int i=0; i<10; i++)
Packet pkt = jc.getPacket();
writer.writePacket(pkt);
}
writer.close();
讀出檔案
利用JpcapCaptor.openFile()來讀取檔案,例:
JpcapCaptor jc = JpcapCaptor.openFile("capture.pkt");
while(true) {
Packet pkt = jc.getPacket();
if(pkt == null || pkt == Packet.EOF)
break;
System.out.println(pkt);
}
jc.close();
(2008/01/11) 建霖、威廷畢業了
2008年1月10日 星期四
早睡早起
上學期結束後,因為學分都已經修完了,所以幾乎每天都是晚睡晚起,大約是凌晨兩點多睡,中午起床。
記得剛上大學的時候還都是十一點就寢,聽著光禹的夜光家族入眠,或許是因為我住的宿舍收不太到飛碟電台的訊號,所以漸漸地,就寢時間愈來愈晚。但現在沒課的結果,就是不斷地睡。
上大學後,讓我覺得最大的不同就是幾乎都可以睡到自然醒,跟高中時每天六點起床差太多了。畢業後,很難有機會可以天天睡到自然醒,當然要好好把握。
然而,我的睡眠時間感覺好像不太健康,所以這幾天都試著十二點左右就寢,大約早上八、九點起床。早起的感覺果然不一樣,多了份早餐,還可以多做許多事,希望能繼續維持下去囉。
2008年1月9日 星期三
Jpcap - 抓封包
抓封包前,須先指定要用哪張網路介面卡,我們可以利用JpcapCaptor.openDevice()來選擇。
public static JpcapCaptor openDevice(NetworkInterface interface, int snaplen, boolean promisc, int to_ms)
throws java.io.IOException
interface - 指定網路卡,可用getDeviceList()來取得
snaplen - 封包最大的長度
promisc - 是否將網路卡設定成promisc模式
to_ms - processPacket的timeout值
有兩種抓封包的方法
- callback
- one-by-one
使用callback的方法,必須先實作PacketReceiver這個interface。
PacketReceiver定義一個receivePacket(),我們必實作這個方法。
class PacketPrinter implements PacketReceiver {
public void receivePacket(Packet packet) {
System.out.println(packet);
}
}
接著就可以用processPacket()或loopPacket()來抓封包。
這兩個差別是在於processPacket()是non-blocking而loopPacket()是blocking的方式。
public int processPacket(int count, PacketReceiver handler)
public int loopPacket(int count, PacketReceiver handler)
count指的是要抓多少封包,-1則是一直抓。
one-by-one的法就是一個封包一個封包抓。
public Packet getPacket()
同時我們也可以設定filter來過濾我們想要抓取的封包。
public void setFilter(java.lang.String condition, boolean optimize) throws java.io.IOException
condition - 所要過濾的條件,和tcpdump的filter設定一樣,例如要抓ICMPv6的封包:
setFilter(icmpv6, true);
