如何识别接收到的数据包是使用TCP还是UDP,在java中使用jpcap



我想在TCPPack或UDPPacket中解析我收到的数据包,但如果我为使用UDP作为传输层协议的数据包写"TCPPack pac3=(TCPPack)数据包;",则我会得到一个异常线程"main"java.lang.ClassCastException中的异常:jpcap.packet.UDPPack无法转换为jpcap.packet.TCPPack"

如何识别接收到的数据包是使用TCP还是UDP?实际上,我想从收到的数据包中获取端口号。

问题的明显答案是使用instanceof运算符:

if (packet instanceof TCPPacket) {
    TCPPacket pac3 = (TCPPacket)packet;
    // ...
}

但那有点臭。我不知道JPCAP API,但我想看看是否有任何API调用可以询问数据包的类型。或者,您可以设置两种不同的机制(通道、套接字、回调??)来分别接收UDP和TCP,这样您就知道区别了吗?

您可以在java中使用instanceof运算符来确定数据包的类型。

看起来没有可以调用的基于api的方法。如果有,它将在数据包的父类上,可以在这里找到。

通常,这类事情会在流中处理,其中有TCP流或UDP流。但不幸的是你没有。

您应该能够依赖instanceof,但显然api依赖比instanceof更可取。

另一种选择是使用header()方法。协议似乎存储在IP标头中,您应该可以访问该标头。此页面显示IP标头,其中6将是TCP的协议号,17是UDP。

事实上,常数jpcap.Packet.IPPROTO_TCPjpcap.Packet.IPPROTO_UDP可能映射到这些值。因此,您最好的选择是解析标头。

相关内容

  • 没有找到相关文章

最新更新