Java InetAddress使用示例:正确获取本机IP地址的方式

本文介绍了在Java中如何正确获取本机IP地址,指出InetAddress.getLocalHost()的不足,并详细解析了Linux下的相关网络配置文件。提供了通用的获取本机IP的解决方案,适用于复杂网络环境,包括Windows和Linux系统。
摘要由CSDN通过智能技术生成

前言
本文接着上文的内容,主要解答上文留下的疑问:既然不能使用InetAddress#getLocalHost()直接去获取到本机的IP地址,那么如何破呢?

本文将介绍的是一种通用的获取本机IP地址的解决方案,也就是所谓的“正确姿势”。

正文
为了更好的解释为何InetAddress#getLocalHost()不靠谱,有必要先普及下Linux下的相关文件的解释,比较我们的Java应用绝大部分情况下都是跑在Linux环境下的(甚至国内基本都跑在centos上吧)。

Linux下/sysconfig/network、hosts、host.conf、resolv.conf文件解释
这几个文件都位于/etc/目录下,下面分别给出解释和示例:

/sysconfig/network:此文件是针对本计算机的,是给计算机起的一个名字,是计算机的一个标识。可以使用uname -n 命令来查看本地计算机的计算机名称(比如本例我使用该命令得到的值是l-xxx.syc.prod.ali.qr,也就是配置里的HOSTNAME的值)

支持网络通信

NETWORKING=yes

主机名,若你不设置默认是localhost.localdomain

使用hostname命令查看到的就是这个值

HOSTNAME=l-xxx.syc.prod.ali.qr

不启用IPV6的支持

NETWORKING_IPV6=no
PEERNTP=no
hosts:不同于network,此文间是在网络上使用的。和Windows系统下的hosts文件相类似,就是一个文本文件,里面存放一些IP和域名的对应关系(注意:都是先ip,后域名)
127.0.0.1 localhost

::1表示的时ipv6的本地地址,也就是0000:0000:0000:0000:0000:0000:0000:0001

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

内网ip地址 -> 主机名 的映射关系

10.102.1.153 l-xxx.syc.prod.ali.qr
host.conf:解析顺序/方式,属于一种规则配置。

这里规定先使用DNS来解析域名,然后再查询“/etc/hosts”文件(也可以相反,你调个顺序即可)

order bind,hosts

指定是否“/etc/hosts”文件中指定的主机可以有多个地址

multi on
resolv.conf

DNS

服务器

的配置文件

,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。该文件由

域名解析

来读取(下面会有Java代码示例)

格式:每行以一个关键字开头,后接一个或多个由空格隔开的参数

可选的关键字有:

nameserver:(最重要,此关键字必选,其它可选)定义DNS服务器的IP地址,可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver。

domain:定义本地域名/主

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值