基于Java实现获取本地IP地址和主机名

方式一:通过java.net.InetAddress类获取

public void test1() {
 try {
  InetAddress addr = InetAddress.getLocalHost();
  System.out.println("IP地址:" + addr.getHostAddress() + ",主机名:" + addr.getHostName());
 } catch (UnknownHostException e) {
  e.printStackTrace();
 }
}

输出:

IP地址:192.168.153.1,主机名:DESKTOP-338UP3E

这种方式获取到的主机名没啥问题,这种方式获取的主机名没啥问题,但获取到的IP地址却有待考量,如果一台机器有多个网卡,

他获取的IP是谁的呢?事实上,上面输出的IP是我虚拟机IP地址,既不是我有线网卡的地址,也不是我无线网卡的地址。

方式二:利用java.net.NetworkInterface获取

public void test2() {
 try {
  Enumeration<NetworkInterface> faces = NetworkInterface.getNetworkInterfaces();
  while (faces.hasMoreElements()) { // 遍历网络接口
   NetworkInterface face = faces.nextElement();
   if (face.isLoopback() || face.isVirtual() || !face.isUp()) {
    continue;
   }
   System.out.print("网络接口名:" + face.getDisplayName() + ",地址:");
   Enumeration<InetAddress> address = face.getInetAddresses();
   while (address.hasMoreElements()) { // 遍历网络地址
    InetAddress addr = address.nextElement();
    if (!addr.isLoopbackAddress() && addr.isSiteLocalAddress() && !addr.isAnyLocalAddress()) {
     System.out.print(addr.getHostAddress() + " ");
    }
   }
   System.out.println("");
  }
 } catch (SocketException e) {
  e.printStackTrace();
 }
}

输出:

网络接口名:VMware Virtual Ethernet Adapter for VMnet8,地址:192.168.153.1
网络接口名:TAP-Windows Adapter V9,地址:10.8.0.30
网络接口名:VMware Virtual Ethernet Adapter for VMnet1,地址:192.168.46.1
网络接口名:Intel(R) Dual Band Wireless-AC 8265,地址:172.16.78.27

疑问?:第一、三行为VM虚拟机网络地址,不知为何还在。

工具类:

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

/**
 * 本地主机工具类
 *
 * @author zhi
 * @since 2019年11月13日09:04:36
 *
 */
public class LocalHostUtil {

 /**
  * 获取主机名称
  *
  * @return
  * @throws UnknownHostException
  */
 public static String getHostName() throws UnknownHostException {
  return InetAddress.getLocalHost().getHostName();
 }

 /**
  * 获取系统首选IP
  *
  * @return
  * @throws UnknownHostException
  */
 public static String getLocalIP() throws UnknownHostException {
  return InetAddress.getLocalHost().getHostAddress();
 }

 /**
  * 获取所有网卡IP,排除回文地址、虚拟地址
  *
  * @return
  * @throws SocketException
  */
 public static String[] getLocalIPs() throws SocketException {
  List<String> list = new ArrayList<>();
  Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();
  while (enumeration.hasMoreElements()) {
   NetworkInterface intf = enumeration.nextElement();
   if (intf.isLoopback() || intf.isVirtual()) { //
    continue;
   }
   Enumeration<InetAddress> inets = intf.getInetAddresses();
   while (inets.hasMoreElements()) {
    InetAddress addr = inets.nextElement();
    if (addr.isLoopbackAddress() || !addr.isSiteLocalAddress() || addr.isAnyLocalAddress()) {
     continue;
    }
    list.add(addr.getHostAddress());
   }
  }
  return list.toArray(new String[0]);
 }

 /**
  * 判断操作系统是否是Windows
  *
  * @return
  */
 public static boolean isWindowsOS() {
  boolean isWindowsOS = false;
  String osName = System.getProperty("os.name");
  if (osName.toLowerCase().indexOf("windows") > -1) {
   isWindowsOS = true;
  }
  return isWindowsOS;
 }

 public static void main(String[] args) {
  try {
   System.out.println("主机是否为Windows系统:" + LocalHostUtil.isWindowsOS());
   System.out.println("主机名称:" + LocalHostUtil.getHostName());
   System.out.println("系统首选IP:" + LocalHostUtil.getLocalIP());
   System.out.println("系统所有IP:" + String.join(",", LocalHostUtil.getLocalIPs()));
  } catch (UnknownHostException e) {
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

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

(0)

相关推荐

  • Java实现TCP/IP协议的收发数据(服务端)代码实例

    这篇文章主要介绍了Java实现TCP/IP协议的收发数据(服务端)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 功能如下: 注: 只有服务端,没有客户端,测试时采用第三方软件作为客户端的. 收发数据目前能正常收发数据,只是中文的会变成乱码显示. 采用Thread类实现一个收发数据的线程. 服务端代码: import java.io.IOException; import java.io.InputStream; import java

  • Java获取用户访问IP及地理位置的方法详解

    本文实例讲述了Java获取用户访问IP及地理位置的方法.分享给大家供大家参考,具体如下: 获取用户访问的IP地址 /** * 获取用户ip地址 * @return */ public static String getIp(HttpServletRequest request){ String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown&qu

  • 基于Java向zip压缩包追加文件

    这篇文章主要介绍了基于Java向zip压缩包追加文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 有个需求,从某个接口下载的一个zip压缩包,往里面添加一个说明文件.搜索了一下,没有找到往zip直接添加文件的方法,最终解决方法是先解压.再压缩. 具体过程如下: 1.一个zip文件的压缩和解压工具类 pom.xml加入依赖包,如下: <dependency> <groupId>org.apache.ant</groupId&

  • java如何获取本机IP地址

    本文实例为大家分享了java实现获取本机IP地址的具体代码,供大家参考,具体内容如下 原因:同一台机子上开着两个web工程,现在有需求需要保证两个项目之间交互的安全问题.因为有个旧的项目,所以尽量不做改动.只能在新项目中做改动. 处理办法:获取本地的IP地址,有请求进来时查看请求的来源,只有来源是本地IP的才予以通过. 代码如下: /** * 任务调度调用拦截器 */ public class TaskControlInterceptor implements Interceptor { //存

  • 使用JavaScrip模拟实现仿京东搜索框功能

    使用js模拟实现京东的搜索框,主要用了js中的onfocus(注册焦点事件),onblur(失去焦点的事件): 主要实现了: 在鼠标点进去的时候,里面的默认内容消失: 在输入之后,再点击搜索框外,输入的内容还在搜索框中: 如果输入为空,点击搜索框外,里面自动显示默认内容: 内容颜色的改变 效果图 代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>京东搜

  • eclipse/IDEA配置javafx项目步骤(图文教程)

    在配置javafx之前,需要到Oracle或openJFX的官网下载javafx压缩包并解压,解压路径最好和Java的jdk放在同一目录方便寻找,在下载解压javafx包之后,开始配置javafx项目: 一:eclipse如何配置javafx 1.安装e(fx)clipse 在安装e(fx)clipse之前eclipse是没有创建javafx项目这一选项的 新建项目选择其它(CTRL + N),在选项卡里面并没有javafx项目选项 这时需要我们安装e(fx)clipse插件:在eclipse菜

  • Java实现把文件及文件夹压缩成zip

    最近碰到个需要下载zip压缩包的需求,于是我在网上找了下别人写好的zip工具类.但找了好多篇博客,总是发现有bug.因此就自己来写了个工具类. 这个工具类的功能为: (1)可以压缩文件,也可以压缩文件夹 (2)同时支持压缩多级文件夹,工具内部做了递归处理 (3)碰到空的文件夹,也可以压缩 (4)可以选择是否保留原来的目录结构,如果不保留,所有文件跑压缩包根目录去了,且空文件夹直接舍弃.注意:如果不保留文件原来目录结构,在碰到文件名相同的文件时,会压缩失败. (5)代码中提供了2个压缩文件的方法,

  • 基于Java实现获取本地IP地址和主机名

    方式一:通过java.net.InetAddress类获取 public void test1() { try { InetAddress addr = InetAddress.getLocalHost(); System.out.println("IP地址:" + addr.getHostAddress() + ",主机名:" + addr.getHostName()); } catch (UnknownHostException e) { e.printStac

  • Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开和关闭,IP地址获取等等,早期的Android版本甚至支持对于IP的设置.在这里仅介绍其简单的一个小应用--获取IP地址. 首先先添加Uses-Permission:CHANGE_WIFI_STATE,WAKE_LOCK和ACCESS_WIFI_STATE.代码如下(AndroidManifest.

  • JAVA如何获取客户端IP地址和MAC地址

    本文介绍了JAVA如何获取客户端IP地址和MAC地址 ,分享给大家,具体如下: 1.获取客户端IP地址 public String getIp(HttpServletRequest request) throws Exception { String ip = request.getHeader("X-Forwarded-For"); if (ip != null) { if (!ip.isEmpty() && !"unKnown".equalsIg

  • vue中如何获取本地IP地址

    目录 获取本地IP地址 1.在浏览器中 2.在vue文件中,实现如下 获取本地内网IP 获取本地IP地址 IP地址需要通过js获取: 网上有很多查询接口可以获取到IP,查到的搜狐的比较多,我这里就用搜狐的: http://pv.sohu.com/cityjson?ie=utf-8 1.在浏览器中 直接输入这个地址,就可以获取到ip信息: 2.在vue文件中,实现如下 (1)在config/index.js中 proxyTable:{ } ,在里面添加代理规则 '/api': { target:

  • 安卓 获取手机IP地址的实现代码

    1.获取手机IP地址的代码: public static String getLocalIpAddress(){ try{ for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enu

  • Android开发准确获取手机IP地址的两种方式

    最近看了好多网上获取IP地址的例子,发现好多都不完全准确,这里我写一下获取ip地址的两种方式. 比如微信支付,后台在做接口的时候,要求App端传入IP地址,我们需要判断是网络环境,WI-FI还是3G,所以需要获取这两种环境的ip地址. 第一步:首先是判断网络环境: String ip; ConnectivityManager conMann = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); N

  • JAVA获取本地MAC地址的方法

    InetAddress对象 此类表示Internet协议(IP)地址. IP地址是由IP使用的32位或128位无符号数字,构建UDP和TCP协议的低级协议. IP地址结构由定义RFC 790: Assigned Numbers , RFC 1918: Address Allocation for Private Internets , RFC 2365: Administratively Scoped IP Multicast和RFC 2373: IP Version 6 Addressing

  • java如何实现获取客户端ip地址的示例代码

    目录 一.前言 二.摘要 三.java实现获取客户端ip 一.前言 环境:jdk1.8 + idea2019.3 + Windows10 二.摘要 项目开发中,在日常处理操作日志时,基本都会通过aop切面来实现用户操作日志的记录,但涉及到记录操作日志,想必肯定会有一项是基本都会参考记录的,那就是操作人的客户端ip地址,日后查"脏"也方便. 那么问题来了.具体怎么获取客户端的ip地址啊?哈哈哈,这就是我这期的教学内容,若是有的小伙伴知道怎么获取,那么我要表扬你,但是实现思路是否与我有同异

  • java编程实现获取服务器IP地址及MAC地址的方法

    本文实例讲述了java编程实现获取服务器IP地址及MAC地址的方法.分享给大家供大家参考,具体如下: 已测系统: windows linux unix 排除127.0.0.1 和 0.0.0.0.1等非正常IP import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.ArrayList; import java.util.Enu

  • jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)

    本文实例讲述了jQuery获取访问者IP地址的方法.分享给大家供大家参考,具体如下: <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ //通过调用新浪IP地址库接口查询用户当前所在国家.省份.城市.运营商信息 $.g

随机推荐