以本机当前IP地址为中心的探索

在网络世界里,每台计算机都有唯一的IP地址,这个地址能够标识计算机的位置。我们可以以当前计算机的IP地址为中心,进行一些有趣的探索。

一、IP地址的获取

IP地址是指互联网协议地址,是用于在网络中识别设备的逻辑地址。我们可以通过以下的Java代码获取当前机器的IP地址。

import java.net.InetAddress;
public class GetIp{
  public static void main(String[] args) throws Exception{
    InetAddress address = InetAddress.getLocalHost();
    System.out.println("IP地址:"+address.getHostAddress());
  }
}

代码中,我们调用了Java提供的InetAddress类中的getLocalHost()方法获取本机地址。通过调用getHostAddress()方法获取IP地址。这段代码将会输出当前IP地址。

二、根据IP地址获取地理位置

除了获得IP地址以外,我们还可以通过一些API,将IP地址转换成地理位置信息。下面是一个根据IP地址获取地理位置的Java示例代码:

import net.sf.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class GetAddressByIP {
  public static void main(String[] args) {
    String ip = "114.114.114.114";
    String urlStr = "http://ip-api.com/json/" + ip + "?lang=zh-CN";
    String address = "";
    try {
      URL url = new URL(urlStr);
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.connect();
      InputStream inputStream = connection.getInputStream();
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
      StringBuffer stringBuffer = new StringBuffer();
      String temp = "";
      while ((temp = bufferedReader.readLine()) != null) {
        stringBuffer.append(temp);
      }
      JSONObject jsonObject = JSONObject.fromObject(stringBuffer.toString());
      address = jsonObject.getString("city") + ", " + jsonObject.getString("regionName");
      System.out.println(address);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

代码中,我们调用了百度地图API的服务,将IP地址转换成了地理位置信息。通过访问http://ip-api.com/json/ IP地址 ?lang=zh-CN 获得JSON格式的数据,通过解析数据,我们可以获取城市和地区信息。

三、扫描局域网中的其他主机

在同一个网络下,我们可以通过扫描局域网中的其他主机来了解当前网络中开启的计算机。下面是一个简单的Java代码片段,它可以扫描同一子网中的其他主机。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

public class ScanIP {
  public static void main(String[] args) {
    Enumeration netInterfaces = null;
    try {
      netInterfaces = NetworkInterface.getNetworkInterfaces();
      while (netInterfaces.hasMoreElements()) {
        NetworkInterface networkInterface = netInterfaces.nextElement();
        Enumeration inetAddresses = networkInterface.getInetAddresses();
        while (inetAddresses.hasMoreElements()) {
         InetAddress inetAddress = inetAddresses.nextElement();
         String ip = inetAddress.getHostAddress();
         int i = ip.lastIndexOf(".");
         String add = ip.substring(0, i + 1);
         for (int j = 1; j < 255; j++) {
           String testIp = add + j;
           InetAddress address = InetAddress.getByName(testIp);
           boolean reachable = address.isReachable(3000);
           if (reachable) {
             System.out.println(testIp + " is reachable");
           } else {
             System.out.println(testIp + " is not reachable");
           }
         }
       }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

代码中,我们获取本机所有的网络接口,并对每个接口遍历其子网中的所有IP地址,通过访问IP地址的方式判断该地址是否在使用中。

四、根据IP地址进行端口扫描

在同一个网络下,我们还可以通过端口扫描的方式了解当前网络中开放了哪些端口。下面是一个Java代码示例,通过扫描指定IP的多个端口,获取其端口开放情况。

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class PortScan{
  public static void main(String[] args) {
    String ip = "192.168.0.1";
    for (int i = 1; i <= 65535; i++) {
      final int port = i;
      new Thread(new Runnable() {
        @Override
        public void run() {
          Socket socket = new Socket();
          try {
            socket.connect(new InetSocketAddress(ip, port), 10);
            System.out.println(ip + " : " + port + " is open.");
            socket.close();
          } catch (IOException e) {
            //System.out.println(ip + " : " + port + " is closed.");
          }
        }
      }).start();
    }
  }
}

代码中,我们通过扫描IP地址下的所有端口(1~65535),判断其是否开放。开放的端口将会输出相关信息,而未开放的端口将不做处理。

五、IP地址中数字的含义

IP地址是由四个0~255的数字组成,例如:192.168.1.1。这些数字具有一定的含义。其中,前3个数字组成的是网络地址,而最后一个数字则是主机地址。下面是一个Java示例代码,用于解析IP地址中的数字含义。

import java.net.InetAddress;
import java.net.UnknownHostException;
public class IpAnalyze {
  public static void main(String[] args) throws UnknownHostException {
    String ipAddress = "192.168.1.100";
    InetAddress inetAddress = InetAddress.getByName(ipAddress);
    byte[] byteAddress = inetAddress.getAddress();
    int[] intAddress = new int[4];
    for (int i = 0; i < 4; i++) {
      intAddress[i] = byteAddress[i] < 0 ? byteAddress[i] + 256 : byteAddress[i];
    }
    System.out.println("IP地址:" + ipAddress);
    System.out.println("网络地址:" + intAddress[0] + "." + intAddress[1] + "." + intAddress[2]);
    System.out.println("主机地址:" + intAddress[3]);
  }
}

代码中,我们通过调用Java的InetAddress类,将IP地址转换成一个InetAddress对象。通过getAddress()方法获取IP地址的字节形式,然后将其转换为int类型,就可以获得网络地址和主机地址了。

六、总结

本文介绍了以本机当前IP地址为中心的探索,从IP地址的获取、根据IP地址获取地理位置、扫描局域网中的其他主机、根据IP地址进行端口扫描、IP地址中数字的含义等多个方面展示了与IP地址相关的Java代码示例。通过这些Java代码示例,我们可以更深入地了解IP地址,使用Java实现更多有趣的网络应用。

原创文章,作者:JRCJ,如若转载,请注明出处:https://www.506064.com/n/140282.html

(0)
JRCJJRCJ
上一篇 2024-10-04
下一篇 2024-10-04

相关推荐

  • c语言编笛卡尔曲线,笛卡尔的线段运算

    本文目录一览: 1、c语言笛卡尔积 2、C语言中笛卡尔积是什么? 对象的特点是什么? 3、用c语言编写程序表示笛卡尔定理。 c语言笛卡尔积 交:C={2,3,4,5} 就是既属于A…

    编程 2024-10-11
  • php超强ide(php强大吗)

    1、大家开发php都使用什么IDE? 2、PHp开发有什么强大的IDE吗 3、PHP开发都用什么IDE 4、PHP开发工具IDE哪个好用,请推荐几个?谢谢 可以使用Visual S…

  • wacom驱动的安装与故障排查

    一、Wacom驱动安装 Wacom驱动是一种帮助电脑识别Wacom绘图板的软件,在使用Wacom绘图板时,需要安装对应的Wacom驱动才能正确使用。 1、进入Wacom官网http…

    编程 2024-10-03
  • c语言设函数,C语言设置函数

    本文目录一览: 1、c语言定义函数是什么? 2、如何在C语言中定义一个函数? 3、如何写C语言函数? 4、C语言 编写函数 5、C语言如何定义一个函数 c语言定义函数是什么? 从参…

    编程 2024-10-14
  • 解决java给mysql写数据(mysql写入数据)

    1、用java向mysql中写数据,数据时从键盘输入的,插入语句格式是什么 2、JAVA中向mysql数据库中添加信息,数据库中显示乱码怎么解决,数据库是utf-8具体要怎么做才能…

  • java锁,java锁机制详细讲解

    本文目录一览: 1、在java中有哪些锁 2、java 锁有几种 3、Java中有哪些锁,区别是什么 4、Java锁有哪些种类,以及区别 在java中有哪些锁 给你整理了Java中…

    编程 2024-10-04
  • c语言有安卓版,安卓编译c语言

    本文目录一览: 1、安卓(手机)版C语言与电脑上用的C语言有哪些区别? 2、手机上面能不能编程c语言? 3、安卓系统上能运行c语言的程序吗 4、手机上有c语言编程软件吗? 5、有没…

    编程 2024-10-04
  • CentOS添加永久路由

    一、什么是路由? 路由是计算机网络数据包传输的一种技术,用于决定数据从源计算机经过哪些路径到达目的地计算机。路由器是实现路由技术的设备,用于在互联网中传输数据。通常情况下,当数据包…

    编程 2024-10-04
  • 如何高效使用torchsqueeze提高深度学习模型性能

    在深度学习模型中,我们通常会遇到维度不匹配的问题,此时需要使用各种处理工具来解决。其中,torchsqueeze是一个非常有用的函数,能够帮助我们高效地压缩/删除张量中大小为1的维…

    编程 2024-10-03
  • 深入了解 MySQLFormat 工具

    MySQLFormat 是一款专业的 MySQL 代码格式化工具,可以帮助开发者自动对 MySQL 代码进行格式化,并且支持多种格式化规则。本文将从多个方面对 MySQLForma…

    编程 2024-10-14

发表回复

登录后才能评论