Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Wireshark捕获数据包,但JAVA应用程序不捕获_Java_Networking_Udp_Wireshark - Fatal编程技术网

Wireshark捕获数据包,但JAVA应用程序不捕获

Wireshark捕获数据包,但JAVA应用程序不捕获,java,networking,udp,wireshark,Java,Networking,Udp,Wireshark,我正在控制器端的MEGACO协议上开发一个应用程序。我正在通过UDP prptocol向媒体网关发送MEGACO消息。媒体网关正在响应这些请求。当我使用指定端口和IP筛选器运行wireshark时,wireshark会显示所有捕获的MEGACO数据包。但在我的应用程序(用JAVA编写)中,有些数据包无法到达。更具体地说,对于我的应用程序,只有事务回复和事务回复确认(参考:RFC 3015)消息未到达 我尝试了很多排列和组合。甚至我也为每个接收消息的测试分配了新的数据报包和缓冲区空间。但没有结果。

我正在控制器端的MEGACO协议上开发一个应用程序。我正在通过UDP prptocol向媒体网关发送MEGACO消息。媒体网关正在响应这些请求。当我使用指定端口和IP筛选器运行wireshark时,wireshark会显示所有捕获的MEGACO数据包。但在我的应用程序(用JAVA编写)中,有些数据包无法到达。更具体地说,对于我的应用程序,只有事务回复和事务回复确认(参考:RFC 3015)消息未到达

我尝试了很多排列和组合。甚至我也为每个接收消息的测试分配了新的数据报包和缓冲区空间。但没有结果。我的udp接收器代码如下

while (running) {
        //do work here
        try {
            byte[] dpBuffer = new byte[MAX_BUFFER_SIZE];
            DatagramPacket dp = new DatagramPacket(dpBuffer, MAX_BUFFER_SIZE);
            this.socket.receive(dp);
            byte[] temp = new byte[dp.getLength()];
            System.arraycopy(dp.getData(), 0, temp, 0, dp.getLength());
            System.out.println("Read data");
            for(int i=0;i<temp.length;i++)
            {
                System.out.print((char)(temp[i]));
            }
            ByteArrayUtil msg = new ByteArrayUtil(temp, dp.getLength());
            msgParser.parseMsg(msg);
        } catch (Exception e) {
            logger.error("Megaco Reader Failed to read Packet due to :" ,e);
        }
    }
运行时{
//你在这里工作吗
试一试{
字节[]dpBuffer=新字节[最大缓冲区大小];
DatagramPacket dp=新的DatagramPacket(dpBuffer,最大缓冲区大小);
这个.socket.receive(dp);
字节[]临时=新字节[dp.getLength()];
System.arraycopy(dp.getData(),0,temp,0,dp.getLength());
System.out.println(“读取数据”);
对于(inti=0;i,谢谢你

正如我在评论中提到的,我在wireshark中使用了错误的过滤器。如果您只使用

"udp.port == x" 
作为筛选器,它将筛选具有源端口或目标端口x的数据包。要筛选具有源端口==x或目标端口==x的数据包,应分别使用udp.srcport==x和udp.destport==x。
谢谢大家。

我将重新检查那些Wireshark捕获的数据报的源端口和目标端口。感谢您的评论。在您的评论之后,我刚刚检查了数据包中的端口字段。发现JAVA程序未接收到的数据包的目标端口为60800。但是其余的数据包Wireshark和JAVA程序都接收到端口为2944的数据。但我不明白!我正在Wireshark中设置过滤器为“udp.port==2944&&ip.src==ip address”,但这些数据包中的数据包字段如何变成60800!!!!“udp.port==2944”将在目标端口和源端口中查找端口号。请记住,UDP数据包包含2个端口号,每个系统适用一个。再看一看,您将在其中一个端口中找到2944。感谢大家的评论。这是我的错。我误解了协议的某些行,没有检查两个端口。我只是在使用udp、 端口筛选器。再次感谢。很高兴知道。您可能希望回答自己的问题,以便帮助犯相同错误的人。