因为找不到win8下趁手的端口扫描工具,刚好学了java不久,决定自己动手写个端口扫描练练手
使用了多线程扫描,加快扫描速度
程序很简单,直接上代码
package com.lyp.portscan;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class PortScan implements Runnable{
private int portNumber=0; //记录当前扫描端口号
private String host=null; //主机
private FileWriter writer=null;
public PortScan(String host){
this.host=host;
File file=new File(".\\"+host+".txt"); //将扫描结果输错到txt
try {
writer=new FileWriter(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 线程同步
*/
private synchronized int portAdd(){
return portNumber++;
}
public static void main(String args[]){
if(args.length==0){
System.out.println("请输入有效参数!程序已退出");
System.exit(0);
}
PortScan portScan=new PortScan(args[0]);
System.out.println("待扫描主机:"+args[0]);
/*
* 启动端口扫描进程
* 修改for循环可更改线程个数
*/
for(int i=0;i<500;i++){
new Thread(portScan).start();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
while(portNumber<65535){
try {
int port=portAdd();
System.out.print("\r扫描端口"+port);
Socket socket=new Socket(host, port); //尝试使用指定端口号连接主机
socket.close(); //如果不出错则该端口为开启
System.out.println("\r端口"+port+"开放O(∩_∩)O~");
writer.write("开放的端口:"+port+"\r\n"); //将结果输出到txt
writer.flush();
} catch (UnknownHostException e) {
} catch (IOException e) {
}
}
}
}
欢迎大神拍砖!