Linux 下JAVA程序获取主机IP问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 下JAVA程序获取主机IP问题相关的知识,希望对你有一定的参考价值。

Enumeration < NetworkInterface > allNetInterfaces = null;
try
allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
int num = 0;
while (allNetInterfaces.hasMoreElements())
num++;
NetworkInterface netInterface = allNetInterfaces.nextElement();
Enumeration < InetAddress > addresses = netInterface.getInetAddresses();
ip = addresses.nextElement();
if (ip != null && num == 2)
String pcIp = ip.getHostAddress();
String pcName = ip.getHostName();
System.out.print("IP:" + pcIp + " 主机名:" + pcName);


catch (SocketException e)


打印结果是:IP:0:0:0:0:0:0:0:1%1 主机名:localhost6.localdomain6
怎么解决啊?
我是想获取自己的IP和主机名;
用的方法和大家用的在Linux环境下获取本机的IP和主机名是一样的
但是出现了IP:0:0:0:0:0:0:0:1%1 主机名:localhost6.localdomain6

的情况

很明显这个显示的IPV6的ip地址和主机名称。

看看这个你大概就会明白了。

参考技术A 看看这样行不行。
//获取访问者IP
ip= request.getHeader("x-forwarded-for");

if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))

ip = request.getHeader("Proxy-Client-IP");


if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))

ip = request.getHeader("WL-Proxy-Client-IP");


if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))

ip = request.getRemoteAddr();

参考技术B public static String getLocalIP()
String address = "";
try
Enumeration<?> allNetInterfaces = NetworkInterface
.getNetworkInterfaces();
InetAddress ine = null;
while (allNetInterfaces.hasMoreElements() && address.equals(""))
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces
.nextElement();
if (!netInterface.isVirtual())
Enumeration<?> addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements() && address.equals(""))
ine = (InetAddress) addresses.nextElement();
if (ine != null && ine instanceof Inet4Address)
if (!ine.getHostAddress().equals("127.0.0.1")
&& !netInterface.isVirtual())
address = ine.getHostAddress();
break;





catch (Exception e)
e.printStackTrace();

return address.trim();


试试这个追问

你这方法我的差的不多,但我还是试了一下,不可以

Java网络程序设计 精简启蒙版

  一、基础知识

  1.TCP

  2.UDP

  二、IP地址封装

  1.InetAddress类的常用方法

getLocalHost()                 返回本地主机的InetAddress对象                 InetAddress类型
getByName(String host)         获取指定主机名称的IP地址                       InetAddress类型
getHostName()                  获取此主机名                                 String
getHostAddress()               获取主机IP地址                               String
isReachable(int timeout)       在timeout指定的毫秒时间内,测试IP地址是否可达    Boolean

  2.示例1:测试IP地址从“192.168.131.1”到“192.168.131.150”范围内所有可以访问的主机的名称,如果对方没有安装防火墙,并且网络连接正常的话,都可以访问的。从输出可以看出,192.168.131.1是本地主机的IP,其他地址都不能联通,可能是因为1000毫秒太短或者对方主机装有防火墙的原因。

package bigjunoba.bjtu.iptoname;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;

public class IPToName {
    public static void main(String[] args) {
        String IP = null;
        for (int i = 1; i <= 150; i++) {
            IP = "192.168.131." + i;                        //生成IP字符串
            try {
                InetAddress host;
                host = InetAddress.getByName(IP);            //获取IP封装对象
                if (host.isReachable(1000)) {               //用1秒的时间测试IP地址是否可达
                    String hostName = host.getHostName(); 
                    System.out.println("IP地址" + IP + "的主机名称是:" + hostName);
                }
            } catch (UnknownHostException e) {              //捕获未知主机异常
                e.printStackTrace();
            } catch (IOException e) {                       //捕获输入输出异常
                e.printStackTrace();
            }
        }
        System.out.println("搜索完毕!");
    }
}
IP地址192.168.131.1的主机名称是:BigjunOba
搜索完毕!

  三、套接字

  套接字(Socket)是代表计算机之间网络连接的对象,用于建立计算机之间的TCP连接,使计算机之间可以建立连接并实现网络通信。

  1.服务器端套接字

  服务器端套接字是SercerSocket类的实例对象,用于实现服务器缓存。ServerSocket类将监视指定的端口,并建立客户端到服务器端套接字的连接,也就是客户负责呼叫任务。

  (1)创建服务器端套接字

  创建服务器端套接字可以使用4中构造方法。

  ①ServerScoket()

  默认构造方法,可以创建未绑定端口号的服务器套接字。服务器套接字的所有构造方法都需要处理IOException异常。

  一般格式为:

            try {
                ServerSocket server = new ServerSocket();
            } catch (IOException e) {
                e.printStackTrace();
            }

  ②ServerScoket(int port)

            try {
                ServerSocket server = new ServerSocket(9527);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

  ③

            try {
                ServerSocket server = new ServerSocket(9527, 300);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

  ④

            try {
                ServerSocket server = new ServerSocket(9527, 300);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

  (2)创建接收套接字连接

  2.客户端套接字

  (1)创建客户端套接字

  (2)发送和接收数据

  四、数据报

  1.DatagramPacket

  2.DatagramSocket

  五、网络聊天程序开发

以上是关于Linux 下JAVA程序获取主机IP问题的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么根据指定ip获取主机的名称

Java Web如何获取客户端的Hostname?

如何获取本地 Wi-Fi 网络中主机名的 IP?安卓工作室(JAVA)

java获取windows和linux下本机ip通用方法

Java如何根据主机名(域名)获取IP地址?

如何通过Java获取linux上电脑的ip?