新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > JAVA > 正文:利用线程池技术来实现端口扫描(TCP)

利用线程池技术来实现端口扫描(TCP)

新客网 XKER.COM 2007-10-12 来源: dxaw 收藏本文

一个简单的利用线程池技术实现端口扫描(TCP)的小程序:

 

关键代码如下:

 

// 扫描本机
 private void getLocal()
 {
  String ip = getIP();
  String portStart = txPortStart1.getText().trim();
  String portEnd = txPortEnd1.getText().trim();
  
  if (portStart.length() == 0 || portEnd.length() == 0)
   return;
  
  int s = 0;
  int e = 0;
  
  try {
   s = Integer.valueOf(portStart);
   e = Integer.valueOf(portEnd);
  } catch (Exception ex) {
   JOptionPane.showMessageDialog(null, "端口输入有误");
   return;
  } 
  
  // 检查端口是否超出范围
  if (! (checkPort(s) && checkPort(e)))
  {
   JOptionPane.showMessageDialog(null, "端口应该大于0而小于65535");
   return;
  }
  
    
  scann(ip, s, e);
  
  runThread(); // 启动线程, 监视扫描是否已完成
 }

private String getIP()
 {
  try {
   InetAddress addr = InetAddress.getLocalHost();
      return addr.getHostAddress().toString(); // ip
  }
  catch (Exception e)
  {
   JOptionPane.showMessageDialog(null, "获取IP出错!");
  }
  return null;
 }

// 扫描单个IP
 private void scann(String ip, int startPort, int endPort)
 {
  // 将所有按钮设为不可用
  setBtnEdit(false);
  status.setText("请稍候...");

  String[] add = {ip, ""};
  table.addRow(add);
  exec = Executors.newFixedThreadPool(10);
  for (int i = startPort; i <= endPort; i++)
   exec.execute(new RunSocket(ip, i));
  exec.shutdown();
    
 }
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐