【shell】获取linux本机IP

本文介绍两种在Linux环境下使用Shell脚本获取系统IP地址的方法。第一种方法利用ipaddr命令结合grep和awk筛选出状态为UP的网络接口IP地址;第二种方法通过ifconfig命令排除本地回环地址和IPv6地址,使用awk和tr进一步提取IP地址信息。脚本还包含了一个判断IP地址属于10.x.x.x还是192.x.x.x网段的示例。

方法一:

ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d '/'

方法二:如果有多网卡

ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"

案例:

#!/bin/sh
ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"​`
echo $ip
if[[ $ip =="10."*]]
then
echo "该网段是10.*.*.*网段"
else
echo "该网段是192.*.*.*网段"
fi
### Java 中获取 Linux 本机 IP 地址时出现乱码的解决方案 在 Java 应用程序中,当尝试通过网络接口获取 Linux 主机上的 IP 地址时,可能会遇到因编码问题而导致的乱码现象。这种问题通常发生在主机名解析过程中,或者由于系统默认字符集与 Java 运行环境之间的不一致所引起。 #### 1. **原因分析** 乱码的主要原因是操作系统和 JVM 的字符集配置不同步。具体来说,在某些情况下,Linux 系统可能使用 UTF-8 或其他本地化编码作为其默认字符集,而 Java 默认使用的可能是 ISO-8859-1 或者其他编码方式[^4]。如果未显式指定编码格式,则可能导致字符串转换错误,从而引发乱码。 #### 2. **解决方法** ##### 方法一:强制设定 JVM 字符集 可以通过启动参数 `-Dfile.encoding=UTF-8` 来确保 JVM 使用统一的 UTF-8 编码处理输入输出流以及字符串操作。此方法适用于整个应用程序运行期间保持一致性编码设置。 ```bash java -Dfile.encoding=UTF-8 -jar your-application.jar ``` ##### 方法二:修改代码逻辑以支持多种编码场景 在实际开发中,建议直接控制编码过程而不是依赖于外部环境变量。下面是一个示例代码片段展示如何安全地获取并打印当前机器的所有可用 IPv4 和 IPv6 地址: ```java import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; public class GetLocalIPAddress { public static void main(String[] args) throws SocketException { try { Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) { NetworkInterface ni = networkInterfaces.nextElement(); System.out.println("Name : " + ni.getName()); Enumeration<InetAddress> inetAddresses = ni.getInetAddresses(); while (inetAddresses.hasMoreElements()) { InetAddress ia = inetAddresses.nextElement(); // 打印IPv4地址 if (!ia.isLoopbackAddress() && ia instanceof java.net.Inet4Address){ System.out.println("IPv4 Address: " + new String(ia.getHostAddress().getBytes(), "UTF-8")); } // 如果需要也可以同样处理IPv6地址... } } } catch (Exception e) { e.printStackTrace(); } } } ``` 注意这里我们特别指定了 `new String(byteArray, charset)` 构造器来避免潜在的隐含编码假设带来的风险[^3]。 ##### 方法三:检查并调整系统的区域设置 有时即使设置了正确的JVM参数仍然会看到奇怪的结果,这往往是因为底层C库的行为受到locale的影响所致。可以临时更改shell session中的LOCALE为en_US.UTF-8或其他兼容的语言包再重新测试应用行为是否有改善: ```bash export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 ``` #### 总结 综上所述,要彻底消除Java程序在Linux平台上抓取IP地址时产生的乱码情况,可以从三个方面入手——即合理配置JVM启动选项、改进源代码内部实现细节以及优化目标平台的基础软件栈状态。只有这三个层面协同作用才能达到最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值