我的任务是使用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