问题描述
我想使用ping6请求监视ipv6设备.请让我知道是否有任何开源库可用于发送和接收Ping6请求.我尝试使用JpCap,但无法成功,并收到以下错误消息
I would like to monitor the ipv6 devices using ping6 request. Please let me know is there any open source library is available to send and receive Ping6 request. I tried with JpCap but couldn't succeed and I got the below error message
请帮助我如何解决此问题.有什么方法可以使用JpCap发送Ping6,
Please help me how to solve this problem. Is there any way I can send Ping6 using JpCap,
您的想法受到高度赞赏.
Your thoughts are highly appreciated.
-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;
}
}
} */
}
}
}
我的实现如下,
推荐答案
实际上我是jpcap的新手,但也许您的网络接口不支持ipv6,或者您已禁用了网络接口的ipv6功能?在Windows中,执行以下七个操作以启用(如果可用)网络接口的ipv6:
Actually I'm new to jpcap but maybe your Network Interface does not support ipv6 or you had disabled the ipv6 feature of your network interface?in windows seven do following to enable (if available) ipv6 for network interface:
- 右键单击任务栏(屏幕的右下角)中的网络con
- 点击打开网络和共享中心
- 单击更改适配器设置(左上角)
- 右键单击网络接口(即本地连接),然后单击属性
- 检查
Internet Protocol Version 6 (TCP/IP v6)
- 点击安装
- 然后应用并确定.
- right click over network con in task bar (right lower corner of screen)
- click open network and sharing center
- click change adapter setting (left upper corner)
- right click the network interface (i.e Local Area Connection) and click properties
- Check
Internet Protocol Version 6 (TCP/IP v6)
- Click Install
- Then Apply and OK.
希望有帮助.
这篇关于如何使用Java库(JpCap)发送Ping6请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!