1. 程式人生 > >關於Java獲取本地伺服器IP的問題

關於Java獲取本地伺服器IP的問題

Java獲取本地伺服器IP,我們最簡單的寫法:

import java.net.InetAddress;  
public class CatchIp{
 public static void main(String[] args)
    {
        try
        {
            // 獲取IP地址
            String ip = InetAddress.getLocalHost().getHostAddress();
       
            System.out.println("IP地址:"+ip);
        }
        catch (Exception e)
        {
            System.out.println("異常:" + e);
            e.printStackTrace();
        }
    }
	}

但是這樣有個問題,我們在windows系統,我們可以獲取正確的IP

但是放在linux,可能是獲取的IP地址為:127.0.0.1

而且在生產系統中,一臺伺服器可能有很多張網絡卡,這樣獲取ip比較麻煩,具體要了解生產系統伺服器的IP地址我們可以參考這個網址:

http://blog.163.com/[email protected]/blog/static/3259410020117493943770/?suggestedreading

程式碼如下:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.lib.com;

/**
 *
 * @author Administrator
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Inet6Address;
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;
     
public class TestAddr {
     
        /**
         * 獲取本機所有IP
         */
    private static String[] getAllLocalHostIP() {
        List<String> res = new ArrayList<String>();
        Enumeration netInterfaces;
        try {
            netInterfaces = NetworkInterface.getNetworkInterfaces();
            InetAddress ip = null;
            while (netInterfaces.hasMoreElements()) {
                NetworkInterface ni = (NetworkInterface) netInterfaces
                        .nextElement();
                System.out.println("---Name---:" + ni.getName());
                Enumeration nii = ni.getInetAddresses();
                while (nii.hasMoreElements()) {
                    ip = (InetAddress) nii.nextElement();
                    if (ip.getHostAddress().indexOf(":") == -1) {
                        res.add(ip.getHostAddress());
                        System.out.println("本機的ip=" + ip.getHostAddress());
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
            }
            return (String[]) res.toArray(new String[0]);
        }
    public static String getLocalIP() {
           String ip = "";
           try {
                   Enumeration<?> e1 = (Enumeration<?>) NetworkInterface.getNetworkInterfaces();
                   while (e1.hasMoreElements()) {
                       NetworkInterface ni = (NetworkInterface) e1.nextElement();
                        System.out.println ("getLocalIP--nic.getDisplayName ():" + ni.getDisplayName ()); 
                    System.out.println ("getLocalIP--nic.getName ():" + ni.getName ());
                       if (!ni.getName().equals("eth0")) {
                           continue;
                       } else {
                       Enumeration<?> e2 = ni.getInetAddresses();
                           while (e2.hasMoreElements()) {
                           InetAddress ia = (InetAddress) e2.nextElement();
                           if (ia instanceof Inet6Address)
                               continue;
                           ip = ia.getHostAddress();
                       }
                           break;
                       }
                   }
               } catch (SocketException e) {
                   e.printStackTrace();
                   System.exit(-1);
               }
               return ip;
           }
        public static String getWinLocalIP () 
            { 
                String ip = ""; 
                try 
                { 
                    Enumeration <?> e1 = (Enumeration <?>) NetworkInterface.getNetworkInterfaces (); 
                    while (e1.hasMoreElements ()) 
                    { 
                        NetworkInterface ni = (NetworkInterface) e1.nextElement ();
                        System.out.println ("getWinLocalIP--nic.getDisplayName ():" + ni.getDisplayName ()); 
                        System.out.println ("getWinLocalIP--nic.getName ():" + ni.getName ());
                        Enumeration <?> e2 = ni.getInetAddresses (); 
                        while (e2.hasMoreElements ()) 
                        { 
                            InetAddress ia = (InetAddress) e2.nextElement (); 
                            ip = ia.getHostAddress (); 
                    } 
                    } 
                } 
                catch (SocketException e) 
                { 
                    e.printStackTrace (); 
                System.exit (-1); 
                } 
                return ip; 
            }
        /**
         * 獲取本機所有實體地址
         *
         * @return
         */
        public static String getMacAddress() {
        String mac = "";
        String line = "";
 
        String os = System.getProperty("os.name");

       if (os != null && os.startsWith("Windows")) {
            try {
                    String command = "cmd.exe /c ipconfig /all";
                    Process p = Runtime.getRuntime().exec(command);
     
                    BufferedReader br = new BufferedReader(new InputStreamReader(p
                            .getInputStream()));
     
                    while ((line = br.readLine()) != null) {
                        if (line.indexOf("Physical Address") > 0) {
                            int index = line.indexOf(":") + 2;
     
                            mac = line.substring(index);
     
                            break;
                        }
                    }
     
                    br.close();
     
                } catch (IOException e) {
                }
            }
     
            return mac;
        }
     
        public String getMacAddress(String host) {
            String mac = "";
            StringBuffer sb = new StringBuffer();
     
            try {
                NetworkInterface ni = NetworkInterface.getByInetAddress(InetAddress
                        .getByName(host));
     
                // byte[] macs = ni.getHardwareAddress();
     
                // for (int i = 0; i < macs.length; i++) {
                // mac = Integer.toHexString(macs[i] & 0xFF);
                //
                // if (mac.length() == 1) {
                // mac = '0' + mac;
                // }
                //
                // sb.append(mac + "-");
                // }
     
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
     
            mac = sb.toString();
            mac = mac.substring(0, mac.length() - 1);
     
            return mac;
    }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            TestAddr.getAllLocalHostIP();
            System.out.println("LocalIP:"+TestAddr.getLocalIP());
            System.out.println("getWinLocalIP:"+TestAddr.getWinLocalIP());
            System.out.println(TestAddr.getMacAddress());
        }
     
    }
當然 ,我們要是想獲取伺服器的唯一資訊,經常有個偷懶的做法,那就是獲取伺服器的hostname,即主機名,寫法也比較統一簡單:
import java.net.InetAddress;  
public class CatchHostname{
 public static void main(String[] args)
    {
        try
        {
            // 獲取計算機名
            String name = InetAddress.getLocalHost().getHostName();
            System.out.println("計算機名:"+name);
         
        }
        catch (Exception e)
        {
            System.out.println("異常:" + e);
            e.printStackTrace();
        }
    }
	}


相關推薦

關於Java獲取本地伺服器IP的問題

Java獲取本地伺服器IP,我們最簡單的寫法: import java.net.InetAddress; public class CatchIp{ public static void main(String[] args) { try

Java獲取本地伺服器Ip的方法

@SuppressWarnings("rawtypes")private static String getHostIp() {Enumeration allNetInterfaces = null;try {allNetInterfaces = NetworkInterf

java 獲取本地系統IP 及網咯IP

public static void main(String[] args) { try { InetAddress address = InetAddress.getLocalHost();//獲取的是本地的IP地址 //PC-20140317PXKX/192.168.0.121

java獲取本地ip地址

/*** 獲取本機的IP* * @return Ip地址*/public static String getLocalHostIP() throws Exception {String ip = null;/** 返回本地主機。 */InetAddress addr = I

java獲取本地真實ip

一、問題在獲取本地ip這個問題上遇見了問題。1、InetAddress.getLocalHost()得到的是VMnet8的ip地址,而並非本地真實ip。2、InetAddress.getLocalHost().getHostAddress()獲取到的是127.0.0.1二、解

java獲取本地IP伺服器IP

java獲取IP地址 最近公司在做日誌報警服務,並將異常資訊推送到簡聊,需要在異常資訊上新增IP地址,用於快速定位異常位置。總結以下知識點: 獲取本地IP地址 String address = InetAddress.getLocalHost().ge

Java獲取本地IP地址

import java.net.*; publicclass ip5 { publicstaticvoid main(String args[]) throws Exception { String ip = InetAddress.getLoc

Java獲取本地IP和計算機名

package com.bjsxt.base.bhz.nio.test; import java.net.InetAddress; import java.net.UnknownHostException; public class Test {public static

java 獲取本地機器外網的IP地址

package org.shuochen.test.network; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumer

java獲取本地區域網的外網IP ....

近日為了滿足2個屋子裡人的通訊需要,需要將本地的外網IP告訴給另一個屋子裡的人。以前都是在群裡喊一句,我這裡的IP是XXXX,有一天自己突發奇想,想通過程式來實現這個自動化通知的過程。於是自己給自己定了需求。       需求:基本目標實現開機將本地的路由WAN

java Socket 獲取本地主機ip

package cn.itcast.net.p1.ip; import java.net.InetAddress; import java.net.UnknownHostException; public class IPDemo { /** *

java 獲取本地路由器分配給電腦的IP地址與主機名相關

本人最近做PC端專案,遇到一個ip地址相關通訊方面的問題,經過網上資料的一些查詢覺得目前此方法相對較好,特在此做個記錄,各位路過的大神,如有更好的方法,麻煩留下解答,讓小弟借鑑下. 下面進入正題,首先獲取到本機的ip地址,比較簡單(主要通過cmd指令arp -

java獲取本地ip

package com.tianjian.property.jieshuns.controller; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.In

Java獲取客戶端IP

不為 pty 獲取 code 中間 clas 代理服務器 gin servle 在開發工作中,我們常常需要獲取客戶端的IP。一般獲取客戶端的IP地址的方法是:request.getRemoteAddr();但是在通過了Apache,Squid等反向代理軟件就不能獲取到客戶端

Java獲取服務器IP和客戶端IP

audio sta ignorecas als style param servlet controls cal 服務器IP: String addr = InetAddress.getLocalHost().getHostAddress(); 說明:很明顯上面

java獲取客戶端IP和服務器IP

ati () ted unknown lock back thead ssi 簡單的 一、Java獲取服務器IP(轉自:https://www.cnblogs.com/george93/p/6306579.html) //方法一,也是最簡單的一種。 String

獲取linux伺服器IP 獲取windows伺服器IP

if (os.toLowerCase ().startsWith ("win"))         {             //window伺服器IP       &

Dorado7 AjaxAction Java獲取客戶端IP

@Expose @DataProvider public String getCurrentEmployeeUserPrivilege(HttpServletRequest request, HttpServletResponse response){ String ip = req

【牛腩】 完美解決 Request.ServerVariables["REMOTE_ADDR"]獲取本地主機ip出現 : : 1

前言: 在做牛腩收費系統的時,獲取本地主機的ip地址,出西安了::1,一開始我 毫不在意,但是後來我越看越彆扭!就從網上找到了解決辦法,接下來和我一塊來搞定它吧! 有時候我們用的地址是ipv6,ipv6的預設的主機地址就是 : : 1,它就是我們要找的主機地址,但是我們自己想要的

java獲取客戶端ip地址

public static String getIp2(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if(StringUtils.isNotEmpty(ip) && !"unKn