gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:31:50 25 4
gpt4 key购买 nike

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

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

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

在 Packet 对象的构造函数中,最后一行是对此方法的调用:

    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 实例。但您不保存对其中任何一个的引用。这意味着,这些新实例可以立即被垃圾收集。因此,我认为,当您尝试访问播放负载时,您的 NullPointerException 不会不会发生,会在您尝试访问 IPPacket 时发生前一步ARPPacket

关于java - 在 Java 中创建网络数据包层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9459862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com