【问题标题】:How to identify whether a received packet is IPPacket or ARPPacket in java using jpcap?java - 如何使用jpcap在java中识别接收到的数据包是IPPacket还是ARPPacket?
【发布时间】:2014-10-15 11:58:37
【问题描述】:

我正在捕获 IPPackets 并使用 Jpcap 库在 java 中分析捕获的数据包。但是捕获的数据包是 ARPPacket 我的程序显示以下错误。

块引用

线程“main”java.lang.ClassCastException 中的异常:jpcap.packet.ARPPacket 无法转换为 jpcap.packet.IPPacket。

块引用

那么我如何识别收到的数据包是 IPPacket 还是 ARPPacket。 代码的核心概念在这里:

import jpcap.*;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
public class Capture  {
public static void main(String[] args) throws IOException {
    NetworkInterface[] device=JpcapCaptor.getDeviceList();
Packet packet;
    JpcapCaptor captor=JpcapCaptor.openDevice(device[0], 65535, true, 20);
for(;;){
 packet=captor.getPacket();       
 IPPacket p=(IPPacket)packet;
 if(p!=null)
   System.out.println("protocol id is"+p.protocol);
}
}
}

我怎样才能克服这个错误。谢谢。

【问题讨论】:

    标签: java network-programming packet-capture packet-sniffers jpcap


    【解决方案1】:

    检查条件

    if(packet instanceof ARPPacket) {
        ARPPacket arp = (ARPPacket) packet;
        // do somthing with ARPPacket
    } else if(packet instanceof IPPacket) {
        // do something with IP Packet
        IPPacket arp = (IPPacket) packet;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2013-12-15
      相关资源
      最近更新 更多