`
asdf314159265
  • 浏览: 246849 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

JAVA实现Ping,需要Jpcap

 
阅读更多
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import jpcap.JpcapCaptor;
import jpcap.JpcapSender;
import jpcap.NetworkInterface;
import jpcap.packet.EthernetPacket;
import jpcap.packet.ICMPPacket;
import jpcap.packet.IPPacket;

public class JPing {

private NetworkInterface[] devices = JpcapCaptor.getDeviceList();
private JpcapSender sender;
private JpcapCaptor jpcap;
private ICMPPacket icmpPacket;
private List<String> listResult = new ArrayList<String>();

/**
  * 组织ICMP报文发送,并开启线程接收报文
  * @param ip
  */
public void ping(String ip) {
  try {
   jpcap = JpcapCaptor.openDevice(devices[0], 200, false, 20);
   sender = jpcap.getJpcapSenderInstance();
   jpcap.setFilter("icmp", true);// 过滤器,只接受ICMP报文
   icmpPacket = new ICMPPacket();
   icmpPacket.type = ICMPPacket.ICMP_ECHO; // 发送回显请求报文

   icmpPacket.setIPv4Parameter(0, false, false, false, 0, false,
     false, false, 0, 1010101, 100, IPPacket.IPPROTO_ICMP,
     devices[0].addresses[1].address, InetAddress.getByName(ip));
   // 随意的32bytes数据
   icmpPacket.data = "abcdefghijklmnopqrstuvwxyzabcdef".getBytes();
   EthernetPacket ethernetPacket = new EthernetPacket();
   ethernetPacket.frametype = EthernetPacket.ETHERTYPE_IP;
   ethernetPacket.src_mac = devices[0].mac_address;
   // 广播地址
   ethernetPacket.dst_mac = new byte[] { (byte) 0xff, (byte) 0xff,
     (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff };
   icmpPacket.datalink = ethernetPacket;
   listResult.add("Pinging " + icmpPacket.dst_ip + " with "
     + icmpPacket.data.length + " bytes of data: ");
   startCapThread(jpcap);
   for (int i = 0; i < 5; i++) {
    icmpPacket.sec = 0;
    //icmpPacket.usec = System.currentTimeMillis();
    icmpPacket.usec = new GregorianCalendar().getTimeInMillis();// 记录发送时间
    icmpPacket.seq = (short) (1000 + i);
    icmpPacket.id = (short) (999 + i);
    sender.sendPacket(icmpPacket);
    try {
     Thread.sleep(1000);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
}

/**
  * 接收ICMP报文
  * @param jpcap
  */
public void getIcmpPacket(JpcapCaptor jpcapCaptor) {
  try {
   while (true) {
    long tmp = 0;
    String tmpStr = null;
    ICMPPacket rp;

    rp = (ICMPPacket) jpcapCaptor.getPacket();

    if ((rp != null) && (rp.seq - rp.id == 1)
      && (rp.type == ICMPPacket.ICMP_ECHOREPLY)) {// 若是ICMP回应报文,则列出。。。
     tmp = (rp.sec * 1000 + rp.usec / 1000 - icmpPacket.sec
       * 1000 - icmpPacket.usec); // 计算发送与接受的时间差
     if (tmp <= 0)
      tmpStr = " < 1 ms ";
     else
      tmpStr = "= " + tmp + " ms  ";

     System.out.println("Reply from "
       + rp.src_ip.getHostAddress() + ": bytes = "
       + rp.data.length + " time " + tmpStr + "TTL = "
       + rp.hop_limit);

     listResult.add("Reply from " + rp.src_ip.getHostAddress()
       + ": bytes = " + rp.data.length + " time " + tmpStr
       + "TTL = " + rp.hop_limit);
    }
   }
  } catch (Exception e) {
   e.printStackTrace();
  }

}

/**
  * 接收ICMP报文
  * @param jpcap
  */
public void startCapThread(final JpcapCaptor jpcap) {

  Runnable runner = new Runnable() {
   public void run() {
    getIcmpPacket(jpcap);
   }
  };
  new Thread(runner).start();
}

public static void main(String[] args) {
  new JPing().ping("www.baidu.com");
}
}
分享到:
评论
1 楼 fangleijiang 2014-09-16  
为什么任何ip都可以ping通

相关推荐

    用java实现ping的几种方式

    ### 使用Java实现Ping的多种方法 在日常网络管理和软件开发中,经常需要检查网络连通性。`ping`命令作为一种简单而有效的工具被广泛应用于这一领域。本文将介绍几种使用Java来实现`ping`功能的方法。 #### 方法一...

    用java实现ping功能

    以下是一个简单的示例代码,展示了如何使用jpcap实现ping功能: ```java import jpcap.*; import jpcap.packet.*; public class SendICMP { public static void main(String[] args) throws Exception { // 获取...

    用java实现ARP报文的发送

    在计算机网络课程设计中,需要实现 ARP 报文的发送和接收,并将其展示在可视化界面上。为此,我们将程序分为两个板块:界面设计和 ARP 报文的发送和接收的实现。 二、界面设计 在界面设计中,我们使用 Java 的 ...

    java语言实现ping函数的功能

    在Java编程语言中,实现ping功能通常涉及到网络通信和套接字编程。ping命令在网络中主要用于检查网络连接的可达性,其...在实际应用中,可能需要借助第三方库,如Jpcap或libpcap的Java接口,来实现更为准确的ping功能。

    java实现ping.pdf

    Java 实现 ICMP 的 ping 命令是一种在 Java 环境下模拟操作系统原生 `ping` 工具的方法。通常,`ping` 命令是通过发送 Internet 控制消息协议 (ICMP) 的回显请求报文来检查网络连接的可达性和延迟。在 Java 中,由于...

    java模拟ping程序(内含java文件,报告任务书)

    因此,我们通常需要使用Jpcap或libpcap库(Java绑定)来捕获和发送ICMP报文。 2. **Jpcap库**:Jpcap是一个Java库,用于网络数据包捕获和分析。它提供了接口来创建原始网络报文,包括ICMP报文,然后通过网络接口...

    java_icmp_ping

    标题 "java_icmp_ping" 涉及到的是一个使用Java编程语言开发的项目,它实现了基于ICMP(Internet Control Message Protocol,互联网控制消息协议)的“ping”功能,类似于我们在Windows系统中使用的命令行工具“ping...

    实现linux java ping 及traceroute 功能.zip

    总结,实现Linux环境下Java的`ping`和`traceroute`功能涉及到对网络协议的深入理解,以及可能需要使用第三方库。在C#中,`ping`操作相对简单,而`traceroute`则需要更多工作。两者都需要开发者具备扎实的网络基础和...

    Jpcap

    通过Jpcap,开发者可以实现各种网络应用,如网络监控、性能测试、安全分析或协议开发。例如,你可以创建一个简单的网络嗅探器来查看网络流量,或者构建一个自定义的故障诊断工具。Jpcap的API设计直观,提供了一系列...

    Java语言实现抓包

    总结来说,Java语言实现抓包主要利用Jpcap库,通过编程的方式捕获和解析网络数据包,获取网络通信的各种细节。这个项目不仅涵盖了基本的数据包捕获,还扩展到了流量和速度的监测,提供了一套全面的网络监控解决方案...

    jpcap-doc-shendi.CHM

    JPCAP的API文档,JPCAP使得Java可以进行数据链路层操作,比如编写ping程序,自定义协议等,跨平台

    ParallelPing:同时 Ping 子网上的所有机器

    开发者可能需要使用第三方库如JPCAP或者通过`Socket`模拟`Ping`操作。 5. **异常处理**:在网络操作中,异常处理至关重要。`ParallelPing`需要妥善处理如`IOException`、`UnknownHostException`等可能出现的异常。 ...

    ustb_network_course_design:使用Jpcap发送ARP以及ICMP请求

    使用Jpcap发送ARP以及ICMP请求 一、实验过程 首先获取本地的网卡以及IP信息 输入当前网关的地址,在这个拓扑图中也就是172.17.5.1 程序封装ARP请求,向网关发送ARP请求 抓取ARP相应的包,过滤之后获得网关的MAC地址 ...

    JavaPinger

    由于Java标准库不直接支持发送ICMP包,JavaPinger通常需要借助第三方库如JPCAP或JNA来实现。 **2. 套接字编程** 在Java中,套接字(Socket)是进行网络通信的基础。JavaPinger可能使用了Socket类或者DatagramSocket...

    Fine Packet Builder 快速入门

    - **环境依赖**:需要Java环境支持,确保Java版本符合FPB的要求。 - **配置说明**:配置文件通常包含在FPB安装目录下,用于设置项目的路径、编译选项等。 #### 3. 系统构成 - **核心组件**:主要包括协议定义模块、...

    jNetPort:网络监控工具-开源

    jNetPort是一个完整的基于Java的网络监视工具,包括:-用于多个端口扫描器引擎(包括Nmap)的图形用户界面-具有全球IP位置显示的Traceroute工具-图形ping工具-统计部分,该部分可以管理,比较和显示结果-多任务环境...

    个人嗅探器

    功能验证手段:在运行 Sniffer 的同时,执行标准的 Ping 、 Telnet 和浏览网页等操作,检查 Sniffier 能否返回预期的结果。 数据包保存:可以保存选中的包,保存文件要有可读性。 文件重组:一个文件在传输过程中,...

Global site tag (gtag.js) - Google Analytics