java实现见得网络扫描器功能

来源:互联网 发布:淘宝企业店铺要交费吗 编辑:程序博客网 时间:2024/05/21 01:51

首先我实现的功能是先进行IP地址的扫描来判断是否有地址存活,其次再对存活的IP地址来对端口访问来判断是否是否有端口开放


首先是对ip地址扫描

public class SocketThread implements Runnable{InetAddress inetAddress;String aString;public SocketThread(String a) {// TODO Auto-generated constructor stubaString=a;}@Overridepublic void run() {// TODO Auto-generated method stubtry {inetAddress=InetAddress.getByName(aString);int  timeOut =  3000 ;  //超时应该在3钞以上            try {boolean status = inetAddress.isReachable(timeOut);if(status){System.out.println(aString+":存活");Main.ipC.add(aString);}else{System.out.println(aString+":不存活");}} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} } catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
这是实现的线程类,通过InetAddress来判断IP地址,以3秒为时限来通过isReachable来判断是否能访问,在UnKnownHOstException中也可以加上异常处理,但那里面异常都是不是ip地址的报错,一般情况下不会发生该问题。

其次是对端口的扫描:

try {socket=new Socket(ipC.get(i), j);System.out.print(ipC.get(i)+" 的端口 "+j+":可用  ");InputStream iStream=socket.getInputStream();BufferedReader bReader=new BufferedReader(new InputStreamReader(iStream));String aString;if (!((aString=bReader.readLine())==null)) {System.out.print("端口功能:"+aString);}System.out.println();} catch (UnknownHostException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blockSystem.out.println(ipC.get(i)+" 的端口  "+j+":不可用");}

这通过socket来实现对端口的扫描,当出现io异常则代表该端口不可用,然后有的端口则会返回数据。不如ssh,但是tomcat的8080端口就不会返回数据

下面是完整的程序运行结果图



下面则是完整代码

public class Main {private static String iPStringS,iPStringE;private static int s,e;private static Scanner scanner;public static ArrayList<String> ipC=new ArrayList<>();public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("请输入初始的ip地址");scanner=new Scanner(System.in);iPStringS=scanner.nextLine();System.out.println("请输入结束的ip地址");iPStringE=scanner.nextLine();ipConnect();new java.util.Timer().schedule(new TimerTask() {@Overridepublic void run() {if(ipC.size()==0){System.out.println("结束");return;}System.out.println("请输入初始端口");s=scanner.nextInt();System.out.println("请输入结束端口");e=scanner.nextInt();portConnect();}}, 3000);}public static void portConnect(){Socket socket=null;for(int i=0;i<ipC.size();i++){for(int j=s;j<=e;j++){try {socket=new Socket(ipC.get(i), j);System.out.print(ipC.get(i)+" 的端口 "+j+":可用  ");InputStream iStream=socket.getInputStream();BufferedReader bReader=new BufferedReader(new InputStreamReader(iStream));String aString;if (!((aString=bReader.readLine())==null)) {System.out.print("端口功能:"+aString);}System.out.println();} catch (UnknownHostException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (IOException e1) {// TODO Auto-generated catch blockSystem.out.println(ipC.get(i)+" 的端口  "+j+":不可用");}}}}public static void ipConnect(){String[] ipStrings=iPStringS.split("\\.");String  ip3s=ipStrings[3];ipStrings=iPStringE.split("\\.");String ip3E=ipStrings[3];String ip3=ipStrings[0]+"."+ipStrings[1]+"."+ipStrings[2]+".";int s=new Integer(ip3s);int e=new Integer(ip3E);ExecutorService threadPool = Executors.newCachedThreadPool();for(int i=s;i<=e;i++){String ipall=ip3+i;threadPool.execute(new SocketThread(ipall));}threadPool.shutdown();try {// 请求关闭、发生超时或者当前线程中断,无论哪一个首先发生之后,都将导致阻塞,直到所有任务完成执行// 设置最长等待10秒threadPool.awaitTermination(5, TimeUnit.SECONDS);} catch (InterruptedException e1) {//e1.printStackTrace();}} }




0 0