当前位置:文档之家› 简单端口扫描器java的设计与实现

简单端口扫描器java的设计与实现

简单端口扫描器java的设计与实现IPScan类的实现package scan.pratice;import .InetAddress;import .Socket;import .UnknownHostException;import java.util.ArrayList;import java.util.ListIterator;public class IPScan {static long startTime=System.currentTimeMillis(); //获取开始时间public static void main(String[] args) {if(args.length !=2){System.out.println("参数不对");}int startIP = Integer.parseInt(args[0]);//获得起始IP,因为args[]是String类型,所以要强制转换成int类型int endIP = Integer.parseInt(args[1]);//获得终止IP,同上ArrayList result = new ArrayList<String>();//ip地址扫描for(int id=startIP;id<=endIP;id++){String addres= "10.28.23.";try {Socket s=new Socket(addres+id,8000); //建立连接} catch (UnknownHostException e ) {}catch(Exception e){//System.out.println(e.toString());if(e.toString().endsWith(".ConnectException: Connection timed out: connect")){System.out.println(addres+id+":not exist.");}else{System.out.println(addres+id+":exist.");}}}ListIterator li = result.listIterator();//获得ArrayList的ListIteratorwhile(li.hasNext()){ //如果li里面有元素System.out.println(li.next().toString());//打印出指向的元素,同时将指向下一个元素}long endTime=System.currentTimeMillis(); //获取结束时间System.out.println("程序运行时间:"+(endTime-startTime)+"ms");}}PortScan类的实现package scan.pratice;import java.io.IOException;import .InetAddress;import .Socket;import .UnknownHostException;import java.util.ArrayList;import java.util.ListIterator;public class PortScan {static long startTime=System.currentTimeMillis(); //获取开始时间public static void main(String[] args) {if(args.length !=3){System.out.println("参数不对");}String ip = args[0]; //获得我们指定的服务器地址int startPort = Integer.parseInt(args[1]);//获得起始端口号,因为args[]是String类型,所以要强制转换成int类型int endPort = Integer.parseInt(args[2]);//获得终止端口号,同上if(startPort<1||startPort>65535||endPort<1||endPort>65535){//检查端口是否在合法范围1~65535System.out.printf("端口范围必须在1~65535以内!");return;}else if(startPort>endPort){ //比较起始端口和终止端口System.out.println("端口输入有误! 起始端口必须小于终止端口");return;}InetAddress address;try{address = InetAddress.getByName(ip);//转换类型}catch(UnknownHostException e){System.out.println("无法找到"+ ip);return;}ArrayList result = new ArrayList<String>();//端口扫描for(int nport=startPort;nport<=endPort;nport++){String typeport="";switch( nport ){//其实这儿可以不用switch,直接用个hash表记录就可以case 21:typeport = "(FTP)";break;case 23:typeport = "(TELNET)";break;case 25:typeport = "(SMTP)";break;case 80:typeport = "(HTTP)";break;case 110:typeport = "(POP)";break;case 139:typeport = "(netBIOS)";break;case 1433:typeport = "(SQL Server)";break;case 3389:typeport = "(Terminal Service)";break;case 443:typeport = "(HTTPS)";break;case 1521:typeport = "(Oracle)";break;}//从起始端口到终止端口进行循环try{//System.out.print("Scanning "+nport); //打印扫描进度System.out.println(ip + ":"+nport);Socket s=new Socket(address,nport); //建立连接//关闭连接if(s.isConnected()){result.add("端口号:"+nport+typeport+" open");}s.close();//将打开的端口添加到ArrayList result里面//System.out.println(" : open"); //打印状态}catch(IOException e){System.out.println(e.toString());//System.out.println(":close"); //打印状态result.add("端口号:"+nport+typeport+" close");}}ListIterator li = result.listIterator();//获得ArrayList的ListIteratorwhile(li.hasNext()){ //如果li里面有元素System.out.println(li.next().toString());//打印出指向的元素,同时将指向下一个元素}long endTime=System.currentTimeMillis(); //获取结束时间System.out.println("程序运行时间:"+(endTime-startTime)+"ms");}}TCPConnect类的实现package scan.pratice;import java.io.IOException;import .InetAddress;import .Socket;import .UnknownHostException;import java.util.ArrayList;import java.util.ListIterator;public class TCPConnect {static long startTime=System.currentTimeMillis(); //获取开始时间public static void main(String[] args) {if(args.length !=3){System.out.println("参数不对");}String ip = args[0]; //获得我们指定的服务器地址int startPort = Integer.parseInt(args[1]);//获得起始端口号,因为args[]是String类型,所以要强制转换成int类型int endPort = Integer.parseInt(args[2]);//获得终止端口号,同上if(startPort<1||startPort>65535||endPort<1||endPort>65535){//检查端口是否在合法范围1~65535System.out.printf("端口范围必须在1~65535以内!");return;}else if(startPort>endPort){ //比较起始端口和终止端口System.out.println("端口输入有误! 起始端口必须小于终止端口");return;}InetAddress address;try{address = InetAddress.getByName(ip);//转换类型}catch(UnknownHostException e){System.out.println("无法找到"+ ip);return;}ArrayList result = new ArrayList<String>();/*//端口扫描for(int nport=startPort;nport<=endPort;nport++){String typeport="";switch( nport ){//其实这儿可以不用switch,直接用个hash表记录就可以case 21:typeport = "(FTP)";break;case 23:typeport = "(TELNET)";break;case 25:typeport = "(SMTP)";break;case 80:typeport = "(HTTP)";break;case 110:typeport = "(POP)";break;case 139:typeport = "(netBIOS)";break;case 1433:typeport = "(SQL Server)";break;case 3389:typeport = "(Terminal Service)";break;case 443:typeport = "(HTTPS)";break;case 1521:typeport = "(Oracle)";break;}//从起始端口到终止端口进行循环try{//System.out.print("Scanning "+nport); //打印扫描进度System.out.println(ip + ":"+nport);Socket s=new Socket(address,nport); //建立连接//关闭连接if(s.isConnected()){result.add("端口号:"+nport+typeport+" open");}s.close();//将打开的端口添加到ArrayList result里面//System.out.println(" : open"); //打印状态}catch(IOException e){System.out.println(e.toString());//System.out.println(":close"); //打印状态result.add("端口号:"+nport+typeport+" close");}}*///ip地址扫描for(int id=178;id<183;id++){String addres= "10.28.23.";try {Socket s=new Socket(addres+id,8000); //建立连接} catch (UnknownHostException e ) {}catch(Exception e){//System.out.println(e.toString());if(e.toString().endsWith(".ConnectException: Connection timed out: connect")){System.out.println(addres+id+":not exist.");}else{System.out.println(addres+id+":exist.");}}}ListIterator li = result.listIterator();//获得ArrayList的ListIteratorwhile(li.hasNext()){ //如果li里面有元素System.out.println(li.next().toString());//打印出指向的元素,同时将指向下一个元素}long endTime=System.currentTimeMillis(); //获取结束时间System.out.println("程序运行时间:"+(endTime-startTime)+"ms");}}。

相关主题