前言
關於本人
首先這是本人寫的第一篇博客,可能寫的不好請大家見諒 , 以前只是知識記錄成筆記放到有道雲中 , 自己從來沒有分享過任何知識 , 但是看多了別人的分享 , 覺得自己也應該和別人一樣有分享精神 . 以後本人每次寫了新的項目和學習了新的知識的筆記都會放到這個博客上,希望能找到一些志同道合的朋友,和大家一起進步 , 加油!
項目介紹
關於端口在計算機中一直是重中之重 , 因爲計算機和外部通信都是通過端口. 本項目通過端口檢測 , 發現被佔用的端口 .從而可以進行判斷本機是否中了木馬等 , 本項目非常簡單 , 但是也涉及到了幾個知識點 , 最重要的還是訓練Java能力
涉及知識點
- Java Socket操作
- Java 多線程操作
- Java 集合框架操作
- 一些線程操作的小技巧
程序開發
程序運行結果
程序代碼
package Scanner;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
/**
* Java實現多線程掃描開放端口
* @author Administrator
*
*/
public class Scanner extends Thread {
private List<Integer > openPorts = new ArrayList<>();
private static List<Thread > Threads = new ArrayList<>(); //解決主線程先退出問題
private int[] p; //表示要掃描的端口範圍
Socket s;
public Scanner(int[] p ) {
this.p = p;
}
/**
* 線程1 , 掃描端口
*/
@Override
public void run() {
//System.out.println("線程" + (p[0] + 1) + "已經啓動!" );
for(int i = p[0] ; i < p[1] ; i++ ) {
try {
s = new Socket("ip地址", i ); //通過這樣的方法來判斷端口是否開啓 , 如果沒有連接上會拋出異常
openPorts.add(i );
System.out.println("掃描到端口:" + i ); //解決的問題是每掃描完一個建立連接非常消耗資源 所以一定要關閉
s.close();
} catch (UnknownHostException e) {
} catch (IOException e) {
}
}
super.run();
}
/**
* 主方法
* @param args
*/
public static void main(String[] args) {
long start = System.currentTimeMillis();
for(int i = 0 ; i < 6000 ; i += 100 ) { //創建6000個線程........ 本質上掃描了60000個端口
Thread t = new Scanner(new int[] {
i + 1 , i + 100 // 1 , 100 ; 2 : 200
});
Threads.add(t );
t.start();
}
//解決主線程先退出問題
for(Thread v : Threads ) {
try {
v.join();
} catch (InterruptedException e) {
}
}
long end = System.currentTimeMillis();
System.out.println("掃描時間爲:" + (end - start) );
}
}