Java实现局域网IP地址扫描

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

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;
    }
    
}

调用方法:

public static void main(String[] args) {
        PingResult result=new PingTask("123.123.123.123");
        System.out.println(result.toString());
    }

PingResult 类

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() + "]";
    }
    
}

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

(0)

相关推荐

  • Java网络编程实现的简单端口扫描器示例

    本文实例讲述了Java网络编程实现的简单端口扫描器.分享给大家供大家参考,具体如下: 在计算机网络的学习中,不由得觉得这门课的零碎知识点异常之多,同时因为学习的课本是老外的教材--自顶向下方法,因此学习起来不免觉得吃力,但是从老外的教材里更能从一定高度理解计算机网络的知识体系,也是乐在其中,同时做英语的习题感觉也很有趣味,从各方面来说可以说是获益良多,认识了很多专业词汇.节课之后,便想做一个简单的端口扫描器,用的语言是java,因为实现界面很简单,同时也有封装好的Socket类可以使用,主要思路

  • Java实现局域网IP地址扫描

    Java扫描局域网地址主要通过CMD命令,主要通过Runtime和Process类,由于同一局域网下的IP地址比较多需要通过Java的多线程来扫描端口. import java.io.BufferedInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.util.regex.Matcher; imp

  • JAVA获得域名IP地址的方法

    本文实例讲述了JAVA获得域名IP地址的方法.分享给大家供大家参考.具体如下: import java.net.InetAddress; import java.net.UnknownHostException; public class TestInetAddress { InetAddress myIpAddress = null; InetAddress[] myServer = null; public static void main(String args[]) { TestInet

  • java正则表达式判断 ip 地址是否正确解析

    这篇文章主要介绍了java正则表达式判断 ip 地址是否正确解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 public class ClassWork05 { public static void main(String[] args) { System.out.println(IsIp.isIp("10.10.1.1")); } } class IsIp{ public static boolean isIp(Str

  • java实现根据ip地址获取地理位置

    最近项目某个功能需要根据ip地址从第三方接口获取详细的地理位置,从网上找了很多例子,主要接口有新浪的,淘宝的,腾讯的.试了淘宝的,如果是数量级小的还可以,如果数量级达到上十万级就速度慢了,会导致系统崩溃.下面例子是新浪的,例子不是适合每个项目,需要改一下. /** ipSearchUrl=http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=(这是新浪的接口地址) 在项目中新浪的接口地址没有直接写死,而是去读属性文件. *

  • Java中的IP地址和InetAddress类使用详解

    Java语言的优势之一是Java程序能访问网络资源.Java提供一系列的类支持Java程序访问网络资源. TCP/IP协议和IP地址 为了进行网络通信,通信双方必须遵守通信协议.目前最广泛使用的是TCP/IP协议,它是Internet中各方所遵循的公共协议.TCP(Transport Control Protocol)是一种传输控制协议,IP(Internet Protocol)是一种网际协议,TCP/IP代表这两个协议的. TCP/IP分为四个层次: 网络接口层:负责接收和发送物理帧: 网络层

  • c#获取本机在局域网ip地址的二种方法

    复制代码 代码如下: /// <summary>/// 获取本机在局域网的IP地址/// </summary>/// <returns></returns>private string GetLocalIPAddress(){    System.Net.IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;    string strNativeIP = &quo

  • 使用Java代码将IP地址转换为int类型的方法

    基本知识点    IP --> 整数: 把IP地址转化为字节数组 通过左移位(<<).与(&).或(|)这些操作转为int 整数 --> IP: 将整数值进行右移位操作(>>>),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP. 将整数值进行右移位操作(>>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP. 将整数值进行右移位操作(>>>),右移8位,再进行与操

  • java实现根据ip地址获取地理位置的代码分享

    前几天想给网站后台加个解析ip所在地理位置的功能,在网上看了一些博客,找了几段程序,但总觉得写的不够简洁,感觉很啰嗦.下面这个程序,感觉还算简洁,于是整理调试了一下,可以用,程序调用了"腾讯ip分享计划"提供的接口,当然也可以改成ip138提供的接口,不过这两个网站返回的字符串格式有些不同,要分别做解析. public String getAddressByIP() { try { String strIP = "0.0.0.0"; URL url = new UR

  • Java实现复原IP地址的方法

    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", "255.255.111.35"] PS: 跪了,得LeetCode者得天下,上次我学的位运算符,这次学的ip地址 class Solution { private List<String> res = new ArrayList<>(); public List&

  • Java获取本机IP地址的三种方法总结

    目录 1 获取局域网IP地址 2 获取全部 IPV4/IPV6 IP地址 3 获取全部存放本机IP地址 知识点补充 1 获取局域网IP地址 InetAddress.getLocalHost().getHostAddress(); 2 获取全部 IPV4/IPV6 IP地址 private static List<String> getIpAddress() throws SocketException { List<String> list = new LinkedList<

随机推荐