在应用开发的时候如何获取本机的IP呢?

本人在开发一个线上系统的时候有这样的需求,办法很简单啊,google一下,于是乎有了下面的代码:

方案一:

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
if (interfaces != null) {
while (interfaces.hasMoreElements()) {
try {
NetworkInterface network = interfaces.nextElement();
if ("eth0".equals(network.getName())) { // 验证只有eth0才会获取ip
Enumeration<InetAddress> addresses = network.getInetAddresses();
if (addresses != null) {
while (addresses.hasMoreElements()) {
try {
InetAddress address = addresses.nextElement();
if (isValidAddress(address)) {
return address;
}
} catch (Throwable e) {
if (LOGGER.isWarnEnabled()) {
LOGGER.warn("[getLocalAddress0] Failed to retriving ip address, " + e.getMessage(), e);
}
}
}
}
}
} catch (Throwable e) {
if (LOGGER.isWarnEnabled()) {
LOGGER.warn("[getLocalAddress0] Failed to retriving ip address, " + e.getMessage(), e);
}
}
}
}

这段代码中为什么加入判断eth0呢?因为一般线上服务器可能不止有一个网卡,我们线上内网都是用的eth0,所以就可以写死。但是这样毕竟不好。那怎么解决呢?

方案二:

已知线上某台服务器ip,并可以连上。通过socket链接,获取本机对内网ip

 private static InetAddress getLocalHostBySocket(InetSocketAddress remoteAddress) {
InetAddress host = null;
try {
// 连远程地址
Socket socket = new Socket();
try {
socket.connect(remoteAddress, 1000);
// 得到本地地址
host = socket.getLocalAddress();
} finally {
try {
socket.close();
} catch (Throwable e) {
}
}
} catch (Exception e) {
logger.warn("Can not connect to host {}, cause by :{}",
remoteAddress.toString(), e.getMessage());
}
return host;}

JAVA应用获取本机IP的更多相关文章

  1. java如何获取本机IP

    java如何获取本机IP import java.net.*; public class Test6 { public static void main(String[] args) { // TOD ...

  2. Java 实例 - 获取本机ip地址及主机名

    package guyu.day0824; import java.net.InetAddress; /** * @Author: Fred * @Date: 2020/8/24 09:39 */ p ...

  3. java获取本机IP地址

    转载自:http://blog.csdn.net/thunder09/article/details/5360251 在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一 ...

  4. java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了

    本文参考https://blog.csdn.net/u011809209/article/details/77236602 本文参考https://blog.csdn.net/yinshuomail/ ...

  5. 详谈再论JAVA获取本机IP地址

    首先,你如果搜索“JAVA获取本机IP地址”,基本上搜到的资料全是无用的.比如这篇:http://www.cnblogs.com/zrui-xyu/p/5039551.html实际上的代码在复杂环境下 ...

  6. Java获取本机IP

    try { Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); whil ...

  7. 180709-Java实现获取本机Ip的工具类

    180709-Java实现获取本机Ip的工具类 获取本机Ip算是比较常见的一个需求场景了,比如业务报警,可能就会带上出问题的机器IP,方便直接上去看日志定位问题,那么问题来了,如何获取机器IP呢? I ...

  8. 获取本机IP和主机名

    如果是在windows环境: 使用InetAddress.getLocalHost()方法即可 package com.datongsoft.wg.common.util; import java.n ...

  9. 获取本机IP地址

    这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...

随机推荐

  1. Java单线程多实例和多线程多实例

    最近写了一个程序,是采用多线程往redis里面写入数据,想统计一下一共写了多少条数据,于是用了一个static的全局变量count来累加,这块代码抽象出来就是这样的: public class Mul ...

  2. Django Model笔记

    常用数据类型 # https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types BooleanField:布尔类型true/ ...

  3. POJ-2594

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7035   Accepted: 2 ...

  4. maven repository 配置

    eclipse maven 配置修改: maven repository 配置 http://blog.csdn.net/joewolf/article/details/4876604 Maven缺省 ...

  5. webStorm配置es6转es5

    话说又开始新项目了,刚好今天学习的es6新语法可以试试手,回到家后开始继续学习,然后只是学习es6没有必要弄个gulp,总觉得浪费. 那么前端开发神器的webStorm是一定会支持es6的,于是百度了 ...

  6. 解决CentOS7.4KDE桌面或者gnome桌面安装VLC及声音问题

    一.安装VLC 1.下载源 https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/e/epel-release-7-11.noarch.rpm http ...

  7. String的hashCode分析

    /** * Returns a hash code for this string. The hash code for a * {@code String} object is computed a ...

  8. OpenStack 计算服务 Nova计算节点部署 (九)

    如果使用vmware虚拟机进行部署,需要开启虚拟化:如果是服务器需要在bios上开启. Nova Compute nova-compute 一般运行在计算节点上,通过Messages Queue接收并 ...

  9. 【剑指offer】面试题 64. 求 1+2+3+...+n

    面试题 64. 求 1+2+3+...+n 题目:求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 1.采 ...

  10. linux下LD_PRELOAD的用处

    linux下LD_PRELOAD的用处 在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前 ...