邪恶八进制信息安全团队技术讨论组's Archiver

EvilOctal 2005-1-15 16:10

[转载]简单多线程端口扫描 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]
© 1999-2008 EvilOctal Security Team