Je souhaite surveiller les périphériques ipv6 à l'aide de la requête ping6. S'il vous plaît laissez-moi savoir s'il existe une bibliothèque open source est disponible pour envoyer et recevoir la requête Ping6. J'ai essayé avec JpCap mais ne pouvais réussir et je reçu le message d'erreur ci-dessousComment envoyer une requête Ping6 à l'aide de la bibliothèque Java (JpCap)
java.io.IOException: seulement IPv4 paquet est pris en charge à jpcap.JpcapSender.nativeSendPacket (natif Méthode) à jpcap.JpcapSender.sendPacket (JpcapSender.java:93) à Ping6.sendPing6Request (Ping6.java:131) à Ping6.main (Ping6.java:40)
S'il vous plaît aidez-moi comment résoudre ce problème . Y at-il un moyen que je peux envoyer Ping6 en utilisant JpCap,
Vos pensées sont très appréciées.
-R.Ravikumar
/**
* $Id:$
*
* This class is used to send the ping6 request to the agent.
*
* To get these details we are using JpCap open sourec tool.
*
*/
import jpcap.*;
import jpcap.packet.*;
import java.net.*;
import java.util.*;
/**
* Ping6.java
* @author R.Ravikumar
* @version 1.0 (Dec 13, 2010).
*
*/
public class Ping6 implements PacketReceiver
{
private static Ping6 ping6 = null;
byte[] gatewayMac = null;
JpcapCaptor captor = null;
InetAddress intfNIC = null;
Map<String,byte[]> ipVsMac = null;
jpcap.NetworkInterface nic = null;
public static void main(String args[])
{
Ping6 p6 = Ping6.getInstance();
p6.sendPing6Request();
}
public synchronized static Ping6 getInstance()
{
if(ping6 == null)
{
ping6 = new Ping6();
}
return ping6;
}
private Ping6()
{
//Default Constructor.
initialize();
}
private void initialize()
{
DefaultGatewayDetails gateway = new DefaultGatewayDetails();
gatewayMac = gateway.getgatewayMacAddress();
ipVsMac = gateway.getIpVsMacDetails();
startCapture();
}
public boolean startCapture()
{
try
{
jpcap.NetworkInterface[] nicList =JpcapCaptor.getDeviceList();
networkLoop :
for(jpcap.NetworkInterface machineNIC : nicList)
{
for(NetworkInterfaceAddress intfAddr : machineNIC.addresses)
{
intfNIC = intfAddr.address;
if(intfNIC instanceof Inet6Address)
{
nic = machineNIC;
break networkLoop;
}
}
}
if(nic == null)
{
System.err.println("Unable to find the local network interface.");
return false;
}
captor=JpcapCaptor.openDevice(nic,2000,false,0);
/* PacketReceiver receiver = new PacketReceiver();
receiver.captor = captor;
receiver.start(); */
}
catch(Exception ex)
{
ex.printStackTrace();
return false;
}
return true;
}
public void sendPing6Request()
{
try
{
//create icmp version6 packet.
ICMPPacket icmp=new ICMPPacket();
icmp.type = ICMPPacket.IPPROTO_IPv6;
icmp.seq=100;
icmp.id=0;
icmp.setIPv6Parameter(0, 0, IPPacket.IPPROTO_IPv6_ICMP, 1, intfNIC, InetAddress.getByName("fe80::3d07:7d5e:f831:e76a"));
icmp.data="data".getBytes();
EthernetPacket ether=new EthernetPacket();
ether.frametype=EthernetPacket.ETHERTYPE_IP;
ether.src_mac= ipVsMac.get(intfNIC.getHostAddress());
ether.dst_mac=gatewayMac;
icmp.datalink=ether;
//create top layer IPv4 packet
IPPacket ipPacket = new IPPacket();
ipPacket.setIPv4Parameter(0,false,false,false,0,false,false,false,
0,2697,128,IPPacket.IPPROTO_IPv6,
InetAddress.getByName("rravikumar"),InetAddress.getByName("192.168.118.2"));
ipPacket.datalink = ether;
icmp.ippacket = ipPacket;
or
/*
//create icmp version6 packet.
ICMPPacket icmp=new ICMPPacket();
icmp.type = ICMPPacket.IPPROTO_IPv6;
icmp.seq=100;
icmp.id=0;
icmp.setIPv6Parameter(0, 0, IPPacket.IPPROTO_IPv6_ICMP, 1, intfNIC, InetAddress.getByName("fe80::3d07:7d5e:f831:e76a"));
icmp.data="data".getBytes();
EthernetPacket ether=new EthernetPacket();
ether.frametype=EthernetPacket.ETHERTYPE_IP;
ether.src_mac= ipVsMac.get(intfNIC.getHostAddress());
ether.dst_mac=gatewayMac;
icmp.datalink=ether;
*/
JpcapSender sender=JpcapSender.openDevice(nic);
sender.sendPacket(icmp);
}
catch(Exception exp)
{
exp.printStackTrace();
}
}
public void receivePacket(Packet packet)
{
if(packet instanceof ICMPPacket)
{
/* ICMPPacket icmpPacket = (ICMPPacket) packet;
if((externalIp.equals(icmpPacket.src_ip) && intfIpList.contains(icmpPacket.dst_ip)) ||
(externalIp.equals(icmpPacket.dst_ip) && intfIpList.contains(icmpPacket.src_ip)))
{
DatalinkPacket datalink = icmpPacket.datalink;
if(datalink instanceof EthernetPacket)
{
if(externalIp.equals(icmpPacket.src_ip))
{
gatewayMac = ((EthernetPacket) datalink).src_mac;
}
else
{
gatewayMac = ((EthernetPacket) datalink).dst_mac;
}
}
} */
}
}
}
Ma mise en œuvre est donnée ci-dessous,