使用Java Jpcap进行网络Ping

时间:2012-08-19 17:26:50

标签: java networking ping jpcap

我使用jpcap在java中开发了一个程序,用于ping我办公室的局域网中的计算机。我正在使用Wireshark进行监控。我监控了所有icmp数据包但它只有Icmp请求数据包但没有收到回复数据包。但另一个系统还活着,并通过命令提示符Windows 7回复ping。

当我制作2台计算机的个人局域网并运行该程序时,它正在运行,我收到了回复数据包,我通过wireshark监控。

背后的原因是什么?

我附上了代码。

public static void main(String[] args) throws java.io.IOException{
    NetworkInterface[] devices = JpcapCaptor.getDeviceList();
    if(args.length<1){
        System.out.println("Usage: java SentICMP <device index (e.g., 0, 1..)>");
        for(int i=0;i<devices.length;i++)
            System.out.println(i+":"+devices[i].name+"("+devices[i].description+")");
        System.exit(0);
    }
    int index=Integer.parseInt(args[0]);


    JpcapSender sender=JpcapSender.openDevice(devices[index]);


    ICMPPacket p=new ICMPPacket();
    p.type=ICMPPacket.ICMP_ECHO;
    p.seq=1000;
    p.id=999;
    p.orig_timestamp=123;
    p.trans_timestamp=456;
    p.recv_timestamp=789;
    p.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_ICMP, InetAddress.getByName("192.168.101.18"),InetAddress.getByName("192.168.101.4"));
    p.data="data".getBytes();

    EthernetPacket ether=new EthernetPacket();
    ether.frametype=EthernetPacket.ETHERTYPE_IP;
    ether.src_mac=new byte[]{(byte)00,(byte)26,(byte)18,(byte)00,(byte)25,(byte)65};    
    ether.dst_mac=new byte[]{(byte)90,(byte)230,(byte)186,(byte)60,(byte)205,(byte)90};
    p.datalink=ether;


    //for(int i=0;i<10;i++)
        sender.sendPacket(p);
}

}

0 个答案:

没有答案