java 检测可用端口

---恢复内容开始---

检测本机正在使用的服务端口,尽量快完成,计算消耗时间:

轮询:

 1 public class test implements Runnable {
 2     //private static String host="210.39.3.164";
 3     private static int i=0;
 4     static Date one,two;
 5     public synchronized int get(){
 6         if(i>=1024)notifyAll();
 7         return i++;
 8     }
 9
10     public static void main(String argv[]){
11         one=new Date();
12         //long time=one.getTime()-two.getTime();
13         //System.out.println(time);
14         ExecutorService pool = Executors.newFixedThreadPool(30);
15         for(int j=0;j<15;j++){
16             pool.submit(new Thread(new test()));
17         }
18         pool.shutdown();
19         while(true){
20             if(pool.isTerminated()){
21                 System.out.println(two.getTime()-one.getTime());
22                 break;
23             }
24         }
25     }
26
27     public void run(){
28         int temp;
29         while((temp=get())<1024){
30             try {
31                 Socket s=new Socket(InetAddress.getLocalHost(),temp);
32                 System.out.println("服务端口:   "+temp);
33                 s.close();
34             } catch (UnknownHostException e) {
35                 // TODO Auto-generated catch block
36                 e.printStackTrace();
37             } catch(ConnectException e){
38                 System.out.println(temp+"不是服务端口");
39             }catch (IOException e) {
40                 // TODO Auto-generated catch block
41                 e.printStackTrace();
42             }
43             if(temp==1023){
44                 two=new Date();
45             }
46         }
47     }
48 }

尽量多开线程:

public class test {
	public static void main(String argv[]){
		int i;
		Date d=new Date();
		ExecutorService pool = Executors.newFixedThreadPool(1204);
		for(i=1;i<=1024;i++){
			pool.submit(new Thread(new thread(i)));
		}
		pool.shutdown();
		while(true){
			if(pool.isTerminated()){
				Date last=new Date();
				System.out.println(last.getTime()-d.getTime());
				break;
			}
		}

	}
}

class thread implements Runnable{
	int i;
	thread(int i){
		this.i=i;
	}

	public void run(){
		try {
			Socket s=new Socket(InetAddress.getLocalHost(),i);
			System.out.println("服务端口:   "+i);
			s.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch(ConnectException e){
			//System.out.println(i+"不是服务端口");
		}catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  

轮询方法使用了线程同步,但是没有多开线程方法速度快

---恢复内容结束---

时间: 2024-11-10 07:32:04

java 检测可用端口的相关文章

java 定时检测服务器端口状态方法(二)

上一节写到检测单个端口,如何快速检测一个ip对应的多个端口.可以用多线程. public List check(String ip,String[] ports){ List<String> results=new ArrayList<String>(); results.add(0,ip); ExecutorService exec=Executors.newCachedThreadPool(); ArrayList<Future<String>> res

java实例检查端口是否被占用

127.0.0.1代表本机 主要的原理是:Socket socket = new Socket(Address,port);#address代表主机的IP地址,port代表端口号 如果对该主机的特定端口号能建立一个socket,则说明该主机的该端口在使用. Socket socket = new Socket(Address,port);#address代表主机的IP地址,port代表端口号 如果对该主机的特定端口号能建立一个socket,则说明该主机的该端口在使用. import java.i

对Ansible二次开发来检查服务器的Java程序占用端口数量

一 应用场景描述 有这个么一个需求:对很多台服务器的Java程序所占用的端口数量与正常的值进行对比确认. 可以使用如下命令得到结果: netstat -tulnp|grep java|wc -l 但是服务器很多,每台手动去执行这条命令是不现实的.于是想到使用Ansible批量去执行,Ansible使用paramiko去ssh登录服务器执行命令,并使用mutilprocessing实现多进程ssh登录. 二 代码实现 如果直接使用Ansible去执行,不作任何处理的话.执行情况是这样的: # an

使用Java开发多线程端口扫描工具(二)

一 介绍 这一篇文章是紧接着上一篇文章(http://www.zifangsky.cn/2015/12/使用java开发多线程端口扫描工具/)写的,端口扫描的原理不用多少,我在上一篇文章中已经说过了,至于目的大家都懂得.在这一篇文章里,我主要是对端口扫描工具的继续完善,以及写出一个比较直观的图形界面出来,以方便我们测试使用.界面如下: 这个工具主要是实现了以下几点功能:(1)两种扫描方式,一种是只扫描常见端口,另一种是设置一个起始和结束端口,依次探测.当然,原理很简单,用for循环就可以了:(2

linux 检测远程端口是否打开

检测远程端口是否打开 常用telnet 110.101.101.101 80方式测试远程主机端口是否打开. 除此之外还可以使用: 方法1.nmap ip -p port 测试端口 nmap ip 显示全部打开的端口 根据显示close/open确定端口是否打开. 方法2. nc -v host port 端口未打开返回状态为非0

弱口令检测和端口扫描

一.实验环境 在Linux 6.0 以上版本上操作,并且用远程连接虚拟机rhk-2 二.操作脚本 1.光盘挂载 > mount /dev/cdrom /mnt 2.创建用户和设置用户密码 > useradd lisi > passwd lisi 3.建立yum仓库 > cd /etc/yum.repos.d/ > vim aaa.repo > ---[aaa] > ---name=test > ---baseurl=file:///mnt > ---e

检测服务器端口是否被封(墙)

目录 #在国内测试服务器端口是否通 #在国外测试服务器端口是否通 #在国内外同时测试服务器端口是否通 #说明 #在国内测试服务器端口是否通 工具:http://tool.chinaz.com/port #在国外测试服务器端口是否通 工具:https://www.yougetsignal.com/tools/open-ports/ #在国内外同时测试服务器端口是否通 工具:http://port.ping.pe/ 从上图中可以看出该工具可以从世界各地测试某个服务器的端口是否通,示例中的端口除了ch

java多线程检测可用IP

最近做系统性能优化的时候遇到的一个问题,解决之后分享给大家. 我们通过socket建立连接的时候,如果我们计算机不能与指定的站点连接上,那么这将会导致系统卡在socket的connect这个方法上, 我们都知道socket建立连接需要三次握手,计算机向服务器发送消息头,服务器返回,这时候socket基本连接成功,但是如果连接 不上的话这里会卡一个Timeout的时间,时间一到,方法返回失败,socket默认的timeout好像是20秒, 我们系统现在有一个从可用的ip列表里面检测出一个可用的ip

java 定时检测服务器端口状态方法(一)

最近在写运维管理平台的定时检测集群中各台服务器端口开放状态来判断进程状态的定时任务.顺便整理了下java如何检测服务器一个或者多个端口,以及如何加到定时任务中. 一.java中用Socket检测服务器一个端口开放状态.(对socket不太了解,只是最近用才简单看了下) Socket的英文原义是"孔"或"插座".作为BSD UNIX的进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的