我的任務是使用Java開發簡單的數據包分析工具。我給了一個封裝器,它允許我從網絡接口捕獲以字節數組形式的以太網幀。在Java中創建網絡數據包分層結構
目前,我試圖實現一個數據包層次結構。我有一個Packet類,它存儲src/dst MAC地址和ethertype,然後將幀的其餘內容放在一個單獨的字節數組中。
我的問題是:從這一點來說,我希望能夠創建一個新的對象,比如IPPacket類型,其中用於創建所述數據包的數據是來自以太網幀的剩餘數據(以「 4/6「爲IP版本)。我目前正在通過設置一個名爲isIP的布爾值(基於ethertype(針對IPv4的0x800))來做到這一點。
以我構造函數包對象,最後一行與當前方法的調用:
private void createPacket(){
if(isIP == true)
new IPPacket(payload);
else if(isARP == true)
new ARPPacket(payload);
}
其中有效載荷是含有經汽提的以太網幀的字節數組。
此方法工作不正常,因爲當我嘗試處理IPPacket對象時,在嘗試訪問數組內的字節時,我收到空指針異常。
有沒有一種乾淨的方式來得到我想要的結果?我希望能夠簡單地創建可以級聯我的數據包層次結構的Packet對象,創建相應數據包子類型(ARP,IP,TCP,UDP)的對象,然後顯示給用戶。最終,IPPacket類將TCPPacket和UDPPacket作爲子類。
任何幫助在這裏將不勝感激,謝謝!
使用[Jpcap](http://netresearch.ics.uci.edu/kfujii/Jpcap/doc/)怎麼辦? – aviad 2012-02-27 08:03:40
JPcap不是一個選項,因爲項目分配明確指出「不可使用外部軟件包」。 – pj2889 2012-02-27 14:47:58