Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用jpcap的java中,如何识别接收到的数据包是使用TCP还是UDP?_Java_Network Programming_Jpcap - Fatal编程技术网

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

在使用jpcap的java中,如何识别接收到的数据包是使用TCP还是UDP?,java,network-programming,jpcap,Java,Network Programming,Jpcap,我想在TCPPacket或UDPPacket中解析接收到的数据包,但如果我为使用UDP作为传输层协议的数据包写入“TCPPacket pac3=(TCPPacket)packet;”,则会得到一个异常 线程“main”java.lang.ClassCastException中的异常:无法将jpcap.packet.UDPPacket转换为jpcap.packet.TCPPacket 如何识别接收到的数据包是使用TCP还是UDP? 实际上,我想从收到的数据包中获取端口号。您的问题的明显答案是使用i

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

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

您的问题的明显答案是使用
instanceof
操作符:

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

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

您的问题的明显答案是使用
instanceof
操作符:

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

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

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

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

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

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

您应该能够依赖于
instanceof
,但显然,api依赖性优于
instanceof

另一个选项是使用
header()
方法。协议似乎存储在IP报头中,您应该可以访问该报头。似乎说明了IP头,6是TCP的协议号,17是UDP


事实上,常量
jpcap.Packet.IPPROTO_TCP
jpcap.Packet.IPPROTO_UDP
可能映射到这些值。因此,您的最佳选择似乎是解析标头。

似乎没有基于api的方法可以调用。如果有,它将位于数据包的父类上

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

您应该能够依赖于
instanceof
,但显然,api依赖性优于
instanceof

另一个选项是使用
header()
方法。协议似乎存储在IP报头中,您应该可以访问该报头。似乎说明了IP头,6是TCP的协议号,17是UDP


事实上,常量
jpcap.Packet.IPPROTO_TCP
jpcap.Packet.IPPROTO_UDP
可能映射到这些值。因此,您的最佳选择似乎是解析标头。

接下来,由于您正在TCP和UDP中查找端口,标头的前16位(不是IP标头,而是TCP/UDP标头)是源端口,接下来的16位是目标端口。您应该能够在不考虑是TCP还是UDP的情况下使用它。接下来,因为您正在TCP和UDP中查找端口,所以头的前16位(不是IP头,而是TCP/UDP头)是源端口,接下来的16位是目标端口。您应该能够使用它,而不必关心它是TCP还是UDP。