精华内容
下载资源
问答
  • java 实现 icmp协议测试

    2018-11-05 09:42:30
    java 实现 icmp协议测试 需要在java lib目录下添加libjpcap.so文件
  • import java.io.*;import java.net.*;import java.nio.channels.*;import java.util.*;import java.util.regex.*;public class Ping {static int DAYTIME_PORT = 13;static int port = DAYTIME_PORT;static class Ta...

    137b11b24f156dcb3181c61f08fc7a55.png

    import java.io.*;

    import java.net.*;

    import java.nio.channels.*;

    import java.util.*;

    import java.util.regex.*;

    public class Ping {

    static int DAYTIME_PORT = 13;

    static int port = DAYTIME_PORT;

    static class Target {

    InetSocketAddress address;

    SocketChannel channel;

    Exception failure;

    long connectStart;

    long connectFinish = 0;

    boolean shown = false;

    Target(String host) {

    try {

    address = new InetSocketAddress(InetAddress.getByName(host),

    port);

    } catch (IOException x) {

    failure = x;

    }

    }

    void show() {

    String result;

    if (connectFinish != 0)

    result = Long.toString(connectFinish - connectStart) + "ms";

    else if (failure != null)

    result = failure.toString();

    else

    result = "Timed out";

    System.out.println(address + " : " + result);

    shown = true;

    }

    }

    static class Printer extends Thread {

    LinkedList pending = new LinkedList();

    Printer() {

    setName("Printer");

    setDaemon(true);

    }

    void add(Target t) {

    synchronized (pending) {

    pending.add(t);

    pending.notify();

    }

    }

    public void run() {

    try {

    for (;;) {

    Target t = null;

    synchronized (pending) {

    while (pending.size() == 0)

    pending.wait();

    t = (Target) pending.removeFirst();

    }

    t.show();

    }

    } catch (InterruptedException x) {

    return;

    }

    }

    }

    static class Connector extends Thread {

    Selector sel;

    Printer printer;

    LinkedList pending = new LinkedList();

    Connector(Printer pr) throws IOException {

    printer = pr;

    sel = Selector.open();

    setName("Connector");

    }

    void add(Target t) {

    SocketChannel sc = null;

    try {

    sc = SocketChannel.open();

    sc.configureBlocking(false);

    boolean connected = sc.connect(t.address);

    t.channel = sc;

    t.connectStart = System.currentTimeMillis();

    if (connected) {

    t.connectFinish = t.connectStart;

    sc.close();

    printer.add(t);

    } else {

    synchronized (pending) {

    pending.add(t);

    }

    sel.wakeup();

    }

    } catch (IOException x) {

    if (sc != null) {

    try {

    sc.close();

    } catch (IOException xx) {

    }

    } t.failure = x;

    printer.add(t);

    }

    }

    void processPendingTargets() throws IOException {

    synchronized (pending) {

    while (pending.size() > 0) {

    Target t = (Target) pending.removeFirst();

    try {

    t.channel.register(sel, SelectionKey.OP_CONNECT, t);

    } catch (IOException x) {

    t.channel.close();

    t.failure = x;

    printer.add(t);

    }

    }

    }

    }

    void processSelectedKeys() throws IOException {

    for (Iterator i = sel.selectedKeys().iterator(); i.hasNext();) {

    SelectionKey sk = (SelectionKey) i.next();

    i.remove();

    Target t = (Target) sk.attachment();

    SocketChannel sc = (SocketChannel) sk.channel();

    try {

    if (sc.finishConnect()) {

    sk.cancel();

    t.connectFinish = System.currentTimeMillis();

    sc.close();

    printer.add(t);

    }

    } catch (IOException x) {

    sc.close();

    t.failure = x;

    printer.add(t);

    }

    }

    }

    volatile boolean shutdown = false;

    void shutdown() {

    shutdown = true;

    sel.wakeup();

    }

    public void run() {

    for (;;) {

    try {

    int n = sel.select();

    if (n > 0)

    processSelectedKeys();

    processPendingTargets();

    if (shutdown) {

    sel.close();

    return;

    }

    } catch (IOException x) {

    x.printStackTrace();

    }

    }

    }

    }

    public static void main(String[] args) throws InterruptedException,

    IOException {

    args = new String[] { "8888", "192.168.10.193" };

    if (args.length < 1) {

    System.err.println("Usage: java Ping [port] host...");

    return;

    }

    int firstArg = 0;

    if (Pattern.matches("[0-9]+", args[0])) {

    port = Integer.parseInt(args[0]);

    firstArg = 1;

    }

    Printer printer = new Printer();

    printer.start();

    Connector connector = new Connector(printer);

    connector.start();

    LinkedList targets = new LinkedList();

    for (int i = firstArg; i < args.length; i++) {

    Target t = new Target(args[i]);

    targets.add(t);

    connector.add(t);

    }

    Thread.sleep(2000);

    connector.shutdown();

    connector.join();

    for (Iterator i = targets.iterator(); i.hasNext();) {

    Target t = (Target) i.next();

    if (!t.shown)

    t.show();

    }

    }

    }

    2829f2ca24f0d0090cbba57f30759f23.png

    纯Java实现ICMP的ping命令.doc

    下载Word文档到电脑,方便收藏和打印[全文共2502字]

    编辑推荐:

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    8b95f2eb3d3f7ce4dc3bf1178c74941e.png

    下载Word文档

    展开全文
  • 先前在进行利用java实现ICMP协议在linux环境下配置的时候发现有error: Failed dependencies:jdk >= 1.6 is neede by jpcap-0.7-1libpcap >= 0.9 is needed by jpcap-0.7-1等问题依次安装:1)jdk-6u32-linux-i...

    先前在进行利用java实现ICMP协议在linux环境下配置的时候发现有

    error: Failed dependencies:

    jdk >= 1.6 is neede by jpcap-0.7-1

    libpcap >= 0.9 is needed by jpcap-0.7-1

    等问题

    依次安装:

    1)jdk-6u32-linux-i586-rpm.bin

    添加可运行权限:chmod +x jdk-6u32-linux-i586-rpm.bin

    运行:./jdk-6u32-linux-i586-rpm.bin

    (运行完后会生成一堆的东西,其它的可不理会,只需注意jdk-6u32-linux-i586.rpm)

    安装完毕,jdk位于/usr/java目录下,而同时/opt/sun目录下会有javadb(java6自带的derby 数据库)

    添加可运行权限:chmod +x jdk-6u32-linux-i586.rpm

    用linux的程序管理器进行安装:rpm -ivh jdk-6u32-linux-i586.rpm

    (中间可能会出现**已经安装,则只需用rpm -e **进行卸载,再重新安装就好)

    安装了后默认是能够识别,考虑到有些软件可能无法自动检测java路径,因此有必要设置环境变量。如果是要设置对某一用户起作用,可以编辑该用户的.bash_profile或者.bashrc其中之一,其默认被安装到/usr/java目录下,还是配置一下JDK环境。

    修改文件:/etc/profile

    在文件后添加以下内容

    export JAVA_HOME=/usr/java/jdk1.6.0_32

    export JRE_HOME=$JAVA_HOME/jre

    export PATH=$PATH:$JAVA_HOME/bin

    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

    2)libpcap-0.9.4-8.1.i386.rpm

    rpm -ivh libpcap-0.9.4-8.1.i386.rpm

    安装完了后可用命令rpm -qa|grep libcap,进行检查是否安装成功。如出现

    ae2fc9898de7bba377f7c0225d15f0ff.png

    能出现如上的下文则表明libpcap是安装成功的。

    3)jpcap-0.7-1.i386.rpm

    rpm -ivh jpcap-0.7-1.i386.rpm

    与上同理,检查其是否安装成功,用命令rpm -qa|grep jpcap

    4ddd0b0d470f1aaa97bcd93fc0c93d26.png

    能出现如上图的下文则表明jpcap安装成功

    展开全文
  • importjava.io.*;importjava.net.*;importjava.nio.channels.*;importjava.util.*;importjava.util.regex.*;publicclassPing {staticintDAYTIME_PORT=13;staticintport=DAYTIME_PORT;staticclassTarget {InetSocketA...

    importjava.io.*;importjava.net.*;importjava.nio.channels.*;importjava.util.*;importjava.util.regex.*;publicclassPing {staticintDAYTIME_PORT=13;staticintport=DAYTIME_PORT;staticclassTarget {

    InetSocketAddress address;

    SocketChannel channel;

    Exception failure;longconnectStart;longconnectFinish=0;booleanshown=false;

    Target(String host) {try{

    address=newInetSocketAddress(InetAddress.getByName(host),

    port);

    }catch(IOException x) {

    failure=x;

    }

    }voidshow() {

    String result;if(connectFinish!=0)

    result=Long.toString(connectFinish-connectStart)+"ms";elseif(failure!=null)

    result=failure.toString();elseresult="Timed out";

    System.out.println(address+":"+result);

    shown=true;

    }

    }staticclassPrinterextendsThread {

    LinkedList pending=newLinkedList();

    Printer() {

    setName("Printer");

    setDaemon(true);

    }voidadd(Target t) {synchronized(pending) {

    pending.add(t);

    pending.notify();

    }

    }publicvoidrun() {try{for(;;) {

    Target t=null;synchronized(pending) {while(pending.size()==0)

    pending.wait();

    t=(Target) pending.removeFirst();

    }

    t.show();

    }

    }catch(InterruptedException x) {return;

    }

    }

    }staticclassConnectorextendsThread {

    Selector sel;

    Printer printer;

    LinkedList pending=newLinkedList();

    Connector(Printer pr)throwsIOException {

    printer=pr;

    sel=Selector.open();

    setName("Connector");

    }voidadd(Target t) {

    SocketChannel sc=null;try{

    sc=SocketChannel.open();

    sc.configureBlocking(false);booleanconnected=sc.connect(t.address);

    t.channel=sc;

    t.connectStart=System.currentTimeMillis();if(connected) {

    t.connectFinish=t.connectStart;

    sc.close();

    printer.add(t);

    }else{synchronized(pending) {

    pending.add(t);

    }

    sel.wakeup();

    }

    }catch(IOException x) {if(sc!=null) {try{

    sc.close();

    }catch(IOException xx) {

    }

    }

    t.failure=x;

    printer.add(t);

    }

    }voidprocessPendingTargets()throwsIOException {synchronized(pending) {while(pending.size()>0) {

    Target t=(Target) pending.removeFirst();try{

    t.channel.register(sel, SelectionKey.OP_CONNECT, t);

    }catch(IOException x) {

    t.channel.close();

    t.failure=x;

    printer.add(t);

    }

    }

    }

    }voidprocessSelectedKeys()throwsIOException {for(Iterator i=sel.selectedKeys().iterator(); i.hasNext();) {

    SelectionKey sk=(SelectionKey) i.next();

    i.remove();

    Target t=(Target) sk.attachment();

    SocketChannel sc=(SocketChannel) sk.channel();try{if(sc.finishConnect()) {

    sk.cancel();

    t.connectFinish=System.currentTimeMillis();

    sc.close();

    printer.add(t);

    }

    }catch(IOException x) {

    sc.close();

    t.failure=x;

    printer.add(t);

    }

    }

    }volatilebooleanshutdown=false;voidshutdown() {

    shutdown=true;

    sel.wakeup();

    }publicvoidrun() {for(;;) {try{intn=sel.select();if(n>0)

    processSelectedKeys();

    processPendingTargets();if(shutdown) {

    sel.close();return;

    }

    }catch(IOException x) {

    x.printStackTrace();

    }

    }

    }

    }publicstaticvoidmain(String[] args)throwsInterruptedException,

    IOException {

    args=newString[] {"8888","192.168.10.193"};if(args.length<1) {

    System.err.println("Usage: java Ping [port] host...");return;

    }intfirstArg=0;if(Pattern.matches("[0-9]+", args[0])) {

    port=Integer.parseInt(args[0]);

    firstArg=1;

    }

    Printer printer=newPrinter();

    printer.start();

    Connector connector=newConnector(printer);

    connector.start();

    LinkedList targets=newLinkedList();for(inti=firstArg; i

    Target t=newTarget(args[i]);

    targets.add(t);

    connector.add(t);

    }

    Thread.sleep(2000);

    connector.shutdown();

    connector.join();for(Iterator i=targets.iterator(); i.hasNext();) {

    Target t=(Target) i.next();if(!t.shown)

    t.show();

    }

    }

    }

    展开全文
  • java_icmp_ping

    2018-11-26 21:08:36
    使用Java语言开发 基于ICMP协议 仿Windows系统的Ping程序 简单实现 使用了Jpcap 计算机网络课程设计的作业
  • java实现ICMP协议的ping功能

    千次阅读 2017-08-29 15:45:11
    package com.beijia.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.UnknownHostException; import java.ut
    package com.beijia.test;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.InetAddress;
    import java.net.UnknownHostException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Ping {
    
    	public static boolean ping(String ipAddress) throws Exception{
    		int timeOut=3000;
    		boolean status=InetAddress.getByName(ipAddress).isReachable(timeOut);   // 当返回值是true时,说明host是可用的
    		return status;
    	}
    	
    	public static void ping02(String ipAddress){
    		String line=null;
    		
    		try {
    			Process pro=Runtime.getRuntime().exec("ping "+ipAddress);
    			BufferedReader buf=new BufferedReader(new InputStreamReader(pro.getInputStream()));
    			while((line=buf.readLine())!=null){
    				System.out.println(line);
    			}
    		} catch (Exception e) {
    			System.out.println(e.getMessage());
    		}
    	}
    	
    	public static boolean ping(String ipAddress,int pingTimes,int timeOut){
    		BufferedReader in=null;
    		Runtime r=Runtime.getRuntime();
    		String pingCommand="ping "+ipAddress+" -n "+pingTimes+" -w "+timeOut;
    		
    		try {//执行命令并获取输出
    			System.out.println(pingCommand);
    			Process p=r.exec(pingCommand);
    			if(p==null){
    				return false;
    			}
    			in=new BufferedReader(new InputStreamReader(p.getInputStream()));
    			int connectedCount=0;
    			String line=null;
    			while((line=in.readLine())!=null){
    				connectedCount+=getCheckResult(line);
    			}//如果出现类似=20ms TTL=22这样的字符,出现的次数=测试次数 则返回真
    			return connectedCount==pingTimes;
    		} catch (Exception e) {
    			e.printStackTrace();//出现异常则返回假
    			return false;
    		}finally{
    			try {
    				in.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}	
    		}
    	}
    	
    	//若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0.
    	private static int getCheckResult(String line){
    		Pattern pattern=Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)",Pattern.CASE_INSENSITIVE);
    	    Matcher matcher = pattern.matcher(line); 
    	    while(matcher.find()){
    	    	return 1;
    	    }
    	    return 0;
    	}
    	
    	public static void main(String[] args) throws Exception{
    		String ipAddress="192.168.20.58";
    		System.out.println(ping(ipAddress));
    		ping02(ipAddress);
    		System.out.println(ping(ipAddress,5,5000));
    	}
    }
    

    展开全文
  • 利用java实现ICMP协议在linux环境配
  • 从网上找了个代码,但在运行的时候老不行,不知道该怎么搞,如果在命令行里面输入java ICMP却显示Usage:javaICMP;应该怎样才能往下运行,代码里面的ip地址和mac地址我都修改了,ICMPPacket的seq和id不知道要不要修改...
  • 绝大多数TCPIP传输协议基于IP寻址协议,然后建造在IP之上的TCP和UDP两种协议用于控制数据包的传输。问题在于这些协议只关注数据传输,在传输过程中如果出现错误信息,或者是...ICMP协议在保证数据的准确发送上发挥了...
  • 这就是我今天在Java中“实现”trace route命令所写的内容.我只在Windows中进行了测试,但它也应该在Linux中运行,尽管有几种可用于Linux的traceroute工具,因此很可能需要对这些程序的存在进行一些检查.public class ...
  • ICMP4j 是 JavaICMP ping 实现,具有简单干净的 API。 原生支持 Linux/Mac/Solaris/Windows。 如果可以提供其他原生实现,请联系作者!
  • import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.InetAddress;import java.net.UnknownHostException;public class SendICMPUtil {/*** @param host*/...
  • java代码实现ping

    2019-02-22 14:58:24
    一、纯Java实现ICMP的ping命令 import java.io.*; import java.net.*; import java.nio.channels.*; import java.util.*; import java.util.regex.*; public class Ping {  static int DAYTIME_PORT = 13; ...
  • 注意-请查看新的icmp化身:icmp4j.org! ShortPasta-icmpJavaICMP ping实现,具有简单简洁的API。 Windows本身受支持。 通过生成ping支持Linux。 如果您可以提供其他本机实现,请与作者联系!
  • 前言java是跨平台语言,一般来说对网络的操作都在IP层以上,也就是只能对tcp/udp进行操作,当然也可以设置部分tcp/udp的option,如果想再往IP层或者数据link层操作就无能为力了,必须依靠jni使用本地OS的socket部分...
  • code来源于《网络编程与分层协议设计》 chap7 ICMP协议程序设计----没有理解,没有编译,只是敲了出来ping.h#define ICMP_ECHOREPLY 0#define ICMP_ECHO 8#define BUFSIZE 1500#define DEFAULT_LEN 56typedef ...
  • ICMP 协议栈实现代码 最新完整版ICMP 协议栈实现代码 最新完整版ICMP 协议栈实现代码 最新完整版ICMP 协议栈实现代码 最新完整版
  • 接下来我们看看如何实现ping 程序,要注意ping是对协议的应用而不是协议本身,它利用协议提供的功能来完成一次通讯目的,因此ping只是利用了ICMP协议而不属于ICMP协议,由此我们将以下面架构来完成ping程序: ...
  • 很好的一个java实现的ping功能,适合初学者学习使用,相互学习,相互交流啊
  • 看到了很多局域网内的主机扫描工具,在想怎么去实现这样一个工具。前几天看了Ping源码--ICMP协议的实例,ICMP可以用来探测网联网内的任一主机,ICMP和广播地址结合来扫描局域网内的所有主机不是很容易吗。...
  • java实现ping功能

    2021-02-27 18:41:45
    一、纯Java实现ICMP的ping命令import java.io.*;import java.net.*;import java.nio.channels.*;import java.util.*;import java.util.regex.*;public class Ping {static int DAYTIME_PORT = 13;static int port = ...
  • Java语言实现抓包

    2018-06-12 16:54:50
    本程序可以抓取ip,arp,tcp,udp,icmp协议的包,同时可以检测上网网速,上网流量,抓包数等等
  • 使用c语言编写,mfc实现图形化,功能测试正常,功能比较简单,有能力的可以自己加,我是为了网络编程的作业做的,代码还算完整,需要的下载
  • 用java实现ping的几种方式:纯Java实现ICMP的ping命令,JAVA调用外部EXE实现PING功能,ICMP Ping in Java(JDK 1.5 and above),最简单的办法,直接调用CMD
  • java使用rocksaw和vserv tcpip实现基于ICMP的Ping功能一:准备 www.savarese.orgdownload1. rocksaw-1.0.0-src.tar.gz2. vserv-tcpip-0.9.2-src.tar.gz二:编译源文件得到jar包 使用Ant1. build vserv-tcpip-0.9.2-...
  • 使用ICMP协议实现的PING程序,对最多5个目的IP主机进行监控 VS2008实现 实现了 1,不同时间间隔进行ping 2,最多5个目的IP地址进行ping 3,返回信息,显示在LIstbox控件上 4,用SKINMAGIC实现mfc皮肤的美化!
  • #include #define PACK_LEN 72#define BUFSIZE 4096int main(int argc, char *argv[]){struct sockaddr_in send_sa;//struct s;...int scan_icmp_socket;char send_buff[PACK_LEN];char recv_buff[BUFS...
  • UDP协议实现ICMP协议中的Ping报文

    千次阅读 2020-06-03 19:28:23
    采用UDP协议来实现ICMP协议中的Ping报文功能,就必须在应用层来模拟网格层中的Ping报文的工作流程,即首先由客户机向服务器段发送一个应用层的UDP Ping请求报文,在服务器段程序接收到UDP Ping请求报文后,就会向...
  • 但我会尝试一下……首先,我认为这个问题是合理的:int类型是Java语言中最“突出”的类型(最后但并非最不重要的是因为它作为数组索引的作用).这与它在Java虚拟机中的特殊作用密切相关,其中语言中存在的所有(较小的)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,535
精华内容 4,214
关键字:

java实现icmp

java 订阅