這是一個用來掃描一台機器開放了哪些 port 的程式,主要用到了 Thread 與 Socket 兩個 Class。可能有人會說:「啥?這樣做可以幹麼呢??」。嘿嘿,其實當一名駭客要試圖攻進一台機器時,掃描 port 是常見的第一步驟喔。這下不敢小看它了吧XD
(圖文無關,只是偶然看到 Duke 和手機合影XD)
碎碎念:
- 主機預設ports有65536個(short型態), port以1024為交界又可分兩部分
- 1023以下的ports是常見的服務,且只能由該機器的root開啟port
- 1024以上ports多用於client端
- Java裡與網路相關的Classes大部分放在java.net裡面
- Socet無法建立TCP連線的時候會丟出IOException
- getByName(String hostName); 失敗時會丟出UnknownHostException
/*
* Copyright 2010 CSsula.twgg.org. All Rights Reserved.
* Author: Tony Jian
*/
import java.io.*;
import java.net.*;
public class ScanPort extends Thread{
int port;
String hostName;
public ScanPort(String hostName, int port){
this.port = port;
this.hostName = hostName;
}
public static void main(String[] args){
for(int i=0;i<1024;i++){
new ScanPort(args[0], i).start();
}
}
@Override
public void run(){
try{
InetAddress address = InetAddress.getByName(hostName);
try{
Socket socket = new Socket(address, port); // The port is open if socket was created succeefully.
System.out.printf("%nPort: %d Opened..", port);
socket.close();
}catch(IOException e){
System.out.print("."); // The port isn't open if socket throws IOException.
}
}catch(UnknownHostException e){
e.printStackTrace();
}
}
}