扫描整个网段的多线程程序

2016-02-19 18:57 7 1 收藏

图老师小编精心整理的扫描整个网段的多线程程序希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】


  扫描500个IP10秒钟左右, 一个IP等待0.3秒
  
  用Java写的过程编程,供参考:
  
  package steeven;
  
  import java.sql.*;
  
  import java.io.*;
  
  import java.util.*;
  
  import java.text.*;
  
  import javax.servlet.http.*;
  
  public class Ip extends Common implements Runnable{
  
  public String ip; // IP, 用户名, 主机名
  
  ResultSet list; // 分页显示的记录集
  
  public Ip cur; // 分页显示的当前记录
  
  static public Hashtable ping = new Hashtable(); //ping 后的结果集
  
  static int threadCount = 0; //当前线程的数量, 防止过多线程摧毁电脑
  
  public Ip() {}
  
  public Ip(String ip){
  
  this.ip=ip;
  
  Thread r = new Thread(this);
  
  r.start();
  
  }
  
  public static void Ping(String ip) throws Exception{
  
  //最多30个线程
  
  while(threadCount30)
  
  Thread.sleep(50);
  
  threadCount +=1;
  
  Ip p = new Ip(ip);
  
  }
  
  public void PingAll() throws Exception{
  
  threadCount =0;
  
  ping = new Hashtable();
  
  while(next()) //next()对所有局域网Ip放到cur
  
  Ping(cur.ip);
  
  //等着所有Ping结束
  
  while(threadCount0)
  
  Thread.sleep(50);
  
  }
  
  public void run(){
  
  try{
  
  Process p= Runtime.getRuntime().exec ("ping "+ip+ " -w 300 -n 1");
  
  InputStreamReader ir = new InputStreamReader(p.getInputStream());
  
  LineNumberReader input = new LineNumberReader (ir);
  
  //读取结果行
  
  for (int i=1 ; i7; i++)
  
  input.readLine();
  
  String line= input.readLine();
  
  if (line.length()17 line.substring(8,17).equals("timed out"))
  
  ping.put(ip,new Boolean(false));
  
  else
  
  ping.put(ip,new Boolean(true));
  
  //线程结束
  
  threadCount -= 1;
  
  }catch (IOException e){}
  
  }
  
  public static void main(String[] args) throws Exception{
  
  Ip ip= new Ip();
  
  ip.PingAll();
  
  java.util.Enumeration key = ping.keys();
  
  String k;
  
  while((k = (String)key.nextElement()) != null)
  
  System.out.println(k+": "+ping.get(k));
  
  }
  
  }

来源:http://www.tulaoshi.com/n/20160219/1619601.html

延伸阅读
什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。 什么是多线程? 多线程是指程序中包含多...
注意:在2000年9月我们修改了这篇文章和它的例子以适用于一个更新版本的SwingWorker类。SwingWorker类的这个版本修正了一些微妙的线程bug。 Swing API的设计目标是强大、灵活和易用。特别地,我们希望能让程序员们方便地建立新的Swing组件,不论是从头开始还是通过扩展我们所提供的一些组件。 出于这个目的,我们不要求Swing组件...
---- 摘要:在Java出现之前,编写多线程程序是一件烦琐且伴随许多不安全因素的事情。利用Java,编写安全高效的多线程程序变得简单,而且利用多线程和Java的网络包我们可以方便的实现多线程服务器程序。 ---- Java是伴随Internet的大潮产生的,对网络及多线程具有内在的支持,具有网络时代编程语言的一切特点。从Java的当前应用看...
一 Java 语言的
.NET将关于多线程的功能定义在System.Threading名字空间中。因此,要使用多线程,必须先声明引用此名字空间(using System.Threading;)。 即使你没有编写多线程应用程序的经验,也可能听说过“启动线程”“杀死线程”这些词,其实除了这两个外,涉及多线程方面的还有诸如“暂停线程”“优先级”“挂起线程”“恢复线程”等等。下面将一个...

经验教程

900

收藏

41
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部