简单端口扫描器java的设计与实现IPScan类的实现package sca n. pratice;import java .n et.I netAddress;import java .n et.Socket;import java. net.U nknownH ostExceptio n;import java.util.ArrayList;import java.util.ListIterator;public class IPSca n {static long startTime=System.curre ntTimeMillis(); // 获取开始时间public static void main( Stri ng[] args) {if(args.le ngth !=2){System.out.println(” 参数不对");}int startIP = In teger.parse In t(args[0]);II获得起始IP,因为args[]是String类型,所以要强制转换成int类型int en dIP = In teger.parse In t(args[1]);II获得终止IP,同上ArrayList result = new ArrayList<Stri ng>();I/ip地址扫描for(i nt id=startIP;id<=e ndlP;id++){Stri ng addres= "10.28.23.";try {Socket s=new Socket(addres+id,8000); II 建立连接} catch (UnknownH ostExcepti on e ) {}catch(Exceptio n e){IISystem.out.pri ntl n( e.toStri ng());timedif(e.toStri ng().e ndsWith("java. net.C onn ectExceptio n: Conn ecti onout: conn ect")){System.out.pri ntln( addres+id+": not exist.");}else{System.out.pri ntl n( addres+id+":exist.");Listiterator li = result .li stIterator();//获得ArrayList 的ListIterator while(li.hasNext()){ // 如果li 里面有元素System.out.pri ntln (li. next().toStri ng());//打印出指向的元素,同时将指向下一个元素}long endTime=System.currentTimeMillis(); // 获取结束时间System.out.println(” 程序运行时间:"+(endTime-startTime)+"ms");}}PortScan类的实现package sca n. pratice;import java.i o.I OExcepti on;import java .n et.I netAddress;import java .n et.Socket;import java. net.U nknownH ostExceptio n;import java.util.ArrayList;import java.util.ListIterator;public class PortSca n {static long startTime=System.curre ntTimeMillis(); // 获取开始时间public static void main( Stri ng[] args) {if(args.le ngth !=3){System.out.println(” 参数不对");String ip = args[O]; //获得我们指定的服务器地址int startPort = In teger.parse In t(args[1]);〃获得起始端口号,因为args[]是String类型,所以要强制转换成int类型int en dPort = In teger.parse In t(args[2]);〃获得终止端口号,同上if(startPort<1||startPort>65535||e ndPort<1||e ndPort>65535){//检查端口是否在合法范围1〜65535System.out.printf("端口范围必须在 1 〜65535 以内!");return;}else if(startPort>endPort){ // 比较起始端口和终止端口System.out.println(”端口输入有误!起始端口必须小于终止端口");return;}In etAddress address;try{address = In etAddress.getByName(ip);//转换类型}catch( UnknownH ostExceptio n e){System.out.println(” 无法找到"+ ip);return;}ArrayList result = new ArrayList<Stri ng>();〃端口扫描for(i nt n port=startPort ;n port<=e ndPort ;n port++){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 = "(n etBIOS)";break;case 1433:typeport = "(SQL Server)";break;case 3389:typeport = "(Termi nal Service)";break;case 443:typeport = "(HTTPS)";break;case 1521:typeport = "(Oracle)"; break;}//从起始端口到终止端口进行循环try{//System.out.pri nt("Sca nning "+n port); // 打印扫描进度System.out.pri ntln (ip + ":"+nport);Socket s=new Socket(address ,n port); // 建立连接//关闭连接if(s.isC onn ected()){result.add(” 端口号:"+n port+typeport+" ope n");}s.close();//将打开的端口添加到ArrayList result里面//System.out.println(” : open"); // 打印状态}catch(IOExcepti on e){System.out.pri ntl n( e.toStri ng());//System.out.println(": close"); // 打印状态result.add("端口号:"+n port+typeport+" close");}}ListIterator li = result.listIterator();〃获得ArrayList 的ListIterator while(li.hasNext()){ // 如果li 里面有元素System.out.pri ntln (li. next().toStri ng());〃打印出指向的元素,同时将指向下一个元素}long en dTime=System.curre ntTimeMillis(); // 获取结束时间System.out.println(” 程序运行时间:"+(endTime-startTime)+"ms");TCPConnect类的实现package sca n. pratice;import java.i o.I OExcepti on;import java .n et.I netAddress;import java .n et.Socket;import java. net.U nknownH ostExceptio n;import java.util.ArrayList;import java.util.ListIterator;public class TCPC onn ect {static long startTime=System.curre ntTimeMillis(); 〃获取开始时间public static void main( Stri ng[] args) {if(args.le ngth !=3){System.out.println(” 参数不对");}String ip = args[0]; //获得我们指定的服务器地址int startPort = In teger.parse In t(args[1]);〃获得起始端口号,因为args[]是String类型,所以要强制转换成int类型int en dPort = In teger.parse In t(args[2]);〃获得终止端口号,同上if(startPort<1||startPort>65535||e ndPort<1||e ndPort>65535){//检查端口是否在合法范围1〜65535System.out.printf("端口范围必须在1 〜65535 以内!"); return;}else if(startPort>endPort){ // 比较起始端口和终止端口System.out.println(”端口输入有误!起始端口必须小于终止端口”);return;}In etAddress address;try{address = In etAddress.getByName(ip);//转换类型}catch( UnknownH ostExceptio n e){System.out.println(” 无法找到"+ ip); return;}ArrayList result = new ArrayList<Stri ng>();/*〃端口扫描for(i nt n port=startPort ;n port<=e ndPort ;n port++){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 = "(n etBIOS)";break;case 1433:typeport = "(SQL Server)";break;case 3389:typeport = "(Termi nal Service)";break;case 443:typeport = "(HTTPS)";break;case 1521:typeport = "(Oracle)";break;}//从起始端口到终止端口进行循环try{//System.out.pri nt("Sca nning "+n port); // 打印扫描进度System.out.pri ntln (ip + ":"+nport);Socket s=new Socket(address ,n port); // 建立连接//关闭连接if(s.isC onn ected()){result.add("端口号:"+n port+typeport+" ope n");}s.close();//将打开的端口添加到ArrayList result里面//System.out.println(” : open"); // 打印状态}catch(IOExcepti on e){System.out.pri ntl n( e.toStri ng());//System.out.println(": close"); // 打印状态result.add("端口号:"+nport+typeport+" close");}}*///ip地址扫描for(i nt id=178;id<183;id++){Stri ng addres= "10.28.23.";try {Socket s=new Socket(addres+id,8000); // 建立连接} catch (UnknownH ostExcepti on e ) {}catch(Excepti on e){//System.out.pri ntl n( e.toStri ng());out: if(e.toString().endsWith(".ConnectException: Connection timedconn ect")){System.out.pri ntl n( addres+id+": not exist.");}else{System.out.pri ntl n( addres+id+":exist.");Listiterator li = result.listlterator();〃获得ArrayList 的Listiterator while(li.hasNext()){ // 如果li 里面有元素System.out.pri ntln (li. next().toStri ng());〃打印出指向的元素,同时将指向下一个元素}long en dTime=System.curre ntTimeMillis(); // 获取结束时间System.out.println(” 程序运行时间:"+(endTime-startTime)+"ms");。