好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java实现局域网IP地址扫描

Java扫描局域网地址主要通过CMD命令,主要通过Runtime和Process类,由于同一局域网下的IP地址比较多需要通过Java的多线程来扫描端口。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

import java.io.BufferedInputStream;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.net.InetAddress;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

 

public class PingTask{

    

     private String   address;

    

     public PingTask(String address){

         this .address=address;

     }

    

     public PingResult run() {

         Runtime runtime;

         Process process;

         try {

             runtime=Runtime.getRuntime();

             process=runtime.exec( "ping " +address);

             BufferedInputStream inputStream=(BufferedInputStream) process.getInputStream();

             byte [] bt = new byte [ 1024 ];

             StringBuffer buffer= new StringBuffer();

             int len= 0 ;

             while ((len=inputStream.read(bt, 0 ,bt.length))!=- 1 ){

                 buffer.append( new String(bt, 0 , len, "GBK" ));

             }

             String regex= "(\\d*)?" ;

             String result= "" ;

             Pattern pattern=Pattern.compile(regex);

             Matcher matcher=pattern.matcher(buffer.toString());

             while (matcher.find()){

                 if (!matcher.group().equals( "" )){

                     result=matcher.group();

                 }

             }

            

             InetAddress inetAddress=InetAddress.getByName(address);

             String hostname= "" ;

             if (!inetAddress.getHostName().equals(address)){

                 hostname=inetAddress.getHostName();

             }

             String mac= "" ;

             process=runtime.exec( "arp -a " +address);

            

             BufferedInputStream macinputStream=(BufferedInputStream) process.getInputStream();

             byte [] macbt = new byte [ 1024 ];

             StringBuffer macbuffer= new StringBuffer();

             while ((len=macinputStream.read(macbt, 0 ,macbt.length))!=- 1 ){

                 macbuffer.append( new String(macbt, 0 , len, "GBK" ));

             }

             String[] macresult=macbuffer.toString().trim().split( "\r\n" );

            

             if (!macbuffer.toString().contains( "未找到 ARP" )){

                 mac=macresult[ 2 ].substring( 20 , 40 ).trim();

             }

            

             PingResult pingResult= new PingResult(address,( 100 -Integer.parseInt(result))+ "%" ,mac,hostname);

            

         } catch (UnsupportedEncodingException e) {

             e.printStackTrace();

         } catch (IOException e) {

             e.printStackTrace();

         }

         return pingResult;

     }

    

}

调用方法:

?

1

2

3

4

public static void main(String[] args) {

         PingResult result= new PingTask( "123.123.123.123" );

         System.out.println(result.toString());

     }

PingResult 类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

package com.xu.ip;

 

public class PingResult {

    

     private static String address; //IP地址

     private static String result; //是否可以连接

     private static String physicialaddress; //物理地址

     private static String hostname; //主机名

    

     public String getPhysicialaddress() {

         return physicialaddress;

     }

 

     public void setPhysicialaddress(String physicialaddress) {

         PingResult.physicialaddress = physicialaddress;

     }

 

     public String getHostname() {

         return hostname;

     }

 

     public void setHostname(String hostname) {

         PingResult.hostname = hostname;

     }

 

     public PingResult(String address, String result) {

         PingResult.address = address;

         PingResult.result = result;

     }

 

     public PingResult() {

        

     }

    

     public PingResult(String address, String result, String physicialaddress, String hostname) {

         PingResult.address = address;

         PingResult.result = result;

         PingResult.physicialaddress = physicialaddress;

         PingResult.hostname = hostname;

     }

 

     public String getAddress() {

         return address;

     }

    

     public void setAddress(String address) {

         PingResult.address = address;

     }

    

     public String getResult() {

         return result;

     }

    

     public void setResult(String result) {

         PingResult.result = result;

     }

 

     @Override

     public String toString() {

         return "PingResult [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()="

                 + super .toString() + "]" ;

     }

    

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/qq_34814092/article/details/83306097

查看更多关于Java实现局域网IP地址扫描的详细内容...

  阅读:19次