Wireshark捕获数据包,但JAVA应用程序不捕获
我正在控制器端的MEGACO协议上开发一个应用程序。我正在通过UDP prptocol向媒体网关发送MEGACO消息。媒体网关正在响应这些请求。当我使用指定端口和IP筛选器运行wireshark时,wireshark会显示所有捕获的MEGACO数据包。但在我的应用程序(用JAVA编写)中,有些数据包无法到达。更具体地说,对于我的应用程序,只有事务回复和事务回复确认(参考:RFC 3015)消息未到达 我尝试了很多排列和组合。甚至我也为每个接收消息的测试分配了新的数据报包和缓冲区空间。但没有结果。我的udp接收器代码如下Wireshark捕获数据包,但JAVA应用程序不捕获,java,networking,udp,wireshark,Java,Networking,Udp,Wireshark,我正在控制器端的MEGACO协议上开发一个应用程序。我正在通过UDP prptocol向媒体网关发送MEGACO消息。媒体网关正在响应这些请求。当我使用指定端口和IP筛选器运行wireshark时,wireshark会显示所有捕获的MEGACO数据包。但在我的应用程序(用JAVA编写)中,有些数据包无法到达。更具体地说,对于我的应用程序,只有事务回复和事务回复确认(参考:RFC 3015)消息未到达 我尝试了很多排列和组合。甚至我也为每个接收消息的测试分配了新的数据报包和缓冲区空间。但没有结果。
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、 端口筛选器。再次感谢。很高兴知道。您可能希望回答自己的问题,以便帮助犯相同错误的人。