在Java中创建网络数据包层次结构

在Java中创建网络数据包层次结构,java,networking,inheritance,packet-capture,packet-sniffers,Java,Networking,Inheritance,Packet Capture,Packet Sniffers,我的任务是使用Java开发一个简单的数据包分析工具。我得到了一个包装器,它允许我从网络接口捕获以太网帧作为字节数组 目前,我正在尝试实现一个数据包层次结构。我有一个Packet类,它存储src/dstmac地址和ethertype,然后将帧的剩余内容放在一个单独的字节数组中 我的问题是:从这一点上讲,我希望能够创建一个新对象,比如IPPacket类型,其中用于创建所述数据包的数据是来自以太网帧的剩余数据(从IP版本的“4/6”开始)。我目前正在通过设置一个名为isIP的布尔值来实现这一点,它基于

我的任务是使用Java开发一个简单的数据包分析工具。我得到了一个包装器,它允许我从网络接口捕获以太网帧作为字节数组

目前,我正在尝试实现一个数据包层次结构。我有一个Packet类,它存储src/dstmac地址和ethertype,然后将帧的剩余内容放在一个单独的字节数组中

我的问题是:从这一点上讲,我希望能够创建一个新对象,比如IPPacket类型,其中用于创建所述数据包的数据是来自以太网帧的剩余数据(从IP版本的“4/6”开始)。我目前正在通过设置一个名为isIP的布尔值来实现这一点,它基于以太类型(对于IPv4为0x800)

在我的数据包对象构造函数中,最后一行是对该方法的调用:

    private void createPacket(){
        if(isIP == true)
            new IPPacket(payload);
        else if(isARP == true)
            new ARPPacket(payload);
    }
其中,有效负载是包含剥离以太网帧的字节数组

此方法无法正常工作,因为当我尝试处理IPPacket对象时,当我尝试访问数组中的字节时,接收到空指针异常

有没有一个干净的方法来获得我想要的结果?我希望能够简单地创建数据包对象,这些对象可以通过我的数据包层次结构级联,创建相应数据包子类型(ARP、IP、TCP、UDP)的对象,然后显示给用户。最终,IPPacket类将TCPPacket和UDPPacket作为子类


任何帮助都将不胜感激,谢谢

createPacket
方法中,您可以创建一个新的
IPPacket
实例或一个新的
ARPPacket
实例。但您不保存对其中任何一个的引用。这意味着,可以立即对这些新实例进行垃圾收集。因此我认为,当您尝试访问playload时,
NullPointerException
不会发生,但是当您尝试访问
IPPacket
ARPPacket

时,会发生吗?正如项目分配中明确指出的那样,JPcap不是一个选项“不得使用外部包装。”