如何使用jpcap识别java中收到的数据包是IPPacket还是ARPPacket?

时间:2014-10-15 11:58:37

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

我正在使用Jpcap Library捕获IPPackets并在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);
}
}
}

我怎么能克服这个错误。谢谢你。

1 个答案:

答案 0 :(得分:0)

检查条件

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;
}