[转载]简单多线程端口扫描 JAVA版
信息来源:[url]www.hackway.net[/url][code]/*
* 简单多线程端口扫瞄
* scan2.java
* 编译: javac scan2
* 运行:java scan2 host porMin portMax
*/
import java.io.*;
import java.net.*;
public class Scan2
{
public static void main(String args[])
{
int Thread_Num=60;
String host="localhost";
int minPort;
int maxPort;
int portNum;
ScanPort sp[]=new ScanPort[Thread_Num];
minPort=Integer.parseInt(args[1]);
maxPort=Integer.parseInt(args[2]);
if(args.length == 3 && minPort<maxPort)
{
host=args[0];
minPort=Integer.parseInt(args[1]);
maxPort=Integer.parseInt(args[2]);
}
//--- 计算待扫瞄端口量 ---//
portNum=maxPort-minPort+1;
if(portNum < Thread_Num)
{
//--- 如果端口数小于总线程 ---//
for(int i=0; i<portNum; i++)
{
sp[i]=new ScanPort(host,minPort+i,minPort+i,i);
sp[i].start();
}
}
else
{
int startPort = minPort, endPort = minPort;
int A = portNum / Thread_Num ;
int B = portNum % Thread_Num;
for(int i=0; i<Thread_Num; i++)
{
if(B <= Thread_Num)
{
startPort = endPort;
if ( i!= 0)
startPort += 1;
endPort = startPort + A -1;
if ( i < B)
endPort += 1;
sp[i]=new ScanPort(host,startPort,endPort,i);
sp[i].start();
}
else
{
System.out.println("b大于60");
}
}
}
try
{
loop:
while(true)
{
for(int i=0; i<Thread_Num; i++)
if(sp[i].isAlive()) continue loop;
break;
}
}
catch(NullPointerException e)
{
System.out.println(e.toString());
}
System.out.println("主程序结束");
}
}
class ScanPort extends Thread
{
//--- 分别定义目标,开始端口,结束端口,线程标记 ---//
private String host;
private int sPort;
private int ePort;
private int tag;
private int i;
//--- 构造函数(重新构造端口) ---//
ScanPort(String h, int sP, int eP, int t)
{
super();
host=h;
sPort=sP;
ePort=eP;
tag=t;
}
public void run()
{
//--- 测试端口是否打开 ---//
for(i=sPort; i<=ePort; i++)
{
try
{
Socket s = new Socket(host, i);
System.out.println("Host:"+host+" Port: "+i+" is Opening."+tag+"线程");
Thread.yield();
}
catch(IOException e)
{
System.out.println("Host:"+host+" Port: "+i+" is Closed."+tag+"线程");
}
}
}
} [/code]
页:
[1]