Linux如何查看本机内网IP?

Linux系统中,获取本机内网IP地址是网络配置、服务器管理、故障排查等场景中的常见需求,内网IP通常指私有IP地址,属于RFC 1918定义的保留地址段,包括10.0.0.0/8、172.16.0.0/12、192.168.0.0/16,以及本地环回地址127.0.0.1(不属于内网IP,但常被用于本地测试),本文将详细介绍Linux系统中获取内网IP的多种方法,涵盖命令行工具、配置文件读取、编程接口等,并分析不同方法的适用场景和注意事项。

linux如何获得本机内网ip

使用ifconfig命令获取内网IP

ifconfig是传统的Linux网络配置工具,虽然在新版系统中逐渐被ip命令取代,但许多发行版仍默认支持或可通过安装使用,通过ifconfig可以查看所有网络接口的IP配置信息,包括内网IP。

操作步骤:

  1. 安装ifconfig(若未预装)

    • 在基于Debian/Ubuntu的系统上:sudo apt install net-tools
    • 在基于CentOS/RHEL的系统上:sudo yum install net-tools
  2. 执行命令查看IP
    直接输入ifconfigifconfig -a(显示所有接口,包括未激活的),输出结果中每个网络接口下的inet字段即为该接口的IPv4地址。

    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500  
          inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255  
          inet6 fe80::a00:27ff:fe4e:66a1  prefixlen 64  scopeid 0x20<link>  
          ether 08:00:27:4e:66:a1  txqueuelen 1000  (Ethernet)  
          RX packets 1234  bytes 123456 (123.4 KiB)  
          RX errors 0  dropped 0  overruns 0  frame 0  
          TX packets 567  bytes 78901 (77.0 KiB)  
          TX errors 0  dropped 0  overruns 0  carrier 0  collisions 0  

    其中inet 192.168.1.100即为内网IP。

  3. 提取指定接口的IP
    若需仅查看某个接口(如eth0)的IP,可通过管道结合grepawk过滤:

    ifconfig eth0 | grep 'inet ' | awk '{print $2}'  

使用ip命令获取内网IP

ip是Linux系统中更现代、功能更强大的网络配置工具,属于iproute2包,默认安装在大多数发行版中,相比ifconfigip命令支持更丰富的网络管理功能,推荐优先使用。

操作步骤:

  1. 查看所有接口IP
    执行ip addr show或简写ip a,输出中每个接口下的inet字段包含IP地址和子网掩码(如168.1.100/24)。

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000  
        inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0  
           valid_lft forever preferred_lft forever  
        inet6 fe80::a00:27ff:fe4e:66a1/64 scope link  
           valid_lft forever preferred_lft forever  

    其中inet 192.168.1.100/24中的168.1.100即为内网IP。

  2. 提取指定接口的IP
    若需查看特定接口(如eth0)的IP,可执行:

    ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1  

    cut -d/ -f1用于去除子网掩码部分(如/24),仅保留IP地址。

  3. 过滤内网IP段
    若需排除公网IP和回环地址,仅显示内网IP,可通过grep结合正则表达式:

    linux如何获得本机内网ip

    ip addr show | grep -E 'inet (10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.)' | awk '{print $2}' | cut -d/ -f1  

    此命令会匹配10.x.x.x、172.16.x.x-172.31.x.x、192.168.x.x三个内网段。

读取网络配置文件获取IP

对于静态IP配置的系统,内网IP信息通常存储在网络配置文件中,不同发行版的配置文件路径不同,直接读取文件可获取IP信息,适合自动化脚本场景。

Debian/Ubuntu系统(/etc/network/interfaces

配置文件示例:

auto eth0  
iface eth0 inet static  
    address 192.168.1.100  
    netmask 255.255.255.0  
    gateway 192.168.1.1  

通过grep提取address字段:

grep 'address' /etc/network/interfaces | awk '{print $2}'  

CentOS/RHEL系统(/etc/sysconfig/network-scripts/ifcfg-eth0

配置文件示例:

TYPE=Ethernet  
BOOTPROTO=static  
IPADDR=192.168.1.100  
NETMASK=255.255.255.0  
GATEWAY=192.168.1.1  
DNS1=8.8.8.8  

通过grep提取IPADDR字段:

grep 'IPADDR' /etc/sysconfig/network-scripts/ifcfg-eth0 | awk -F= '{print $2}'  

注意事项:

  • 若系统使用DHCP动态获取IP,配置文件中可能无addressIPADDR字段,此方法仅适用于静态IP配置。
  • 虚拟网卡(如docker0virbr0)的IP也可能被读取,需结合接口名称过滤。

使用NetworkManager工具(nmcli

对于使用NetworkManager管理网络的系统(如Ubuntu、CentOS 7+),可通过nmcli命令获取IP信息,支持图形化网络配置的查询,适合桌面系统和服务器。

操作步骤:

  1. 查看所有设备的IP
    执行nmcli device show,输出中包含每个设备的IP配置信息,

    GENERAL.DEVICE:                         eth0  
    GENERAL.TYPE:                           ethernet  
    GENERAL.HWADDR:                         08:00:27:4E:66:A1  
    IP4.ADDRESS[1]:                         192.168.1.100/24  
    IP4.GATEWAY[1]:                         192.168.1.1  

    其中IP4.ADDRESS[1]即为IPv4内网IP。

  2. 提取指定设备的IP
    若需查看eth0的IP,可执行:

    nmcli device show eth0 | grep 'IP4.ADDRESS' | awk '{print $2}' | cut -d/ -f1  
  3. 查看活动连接的IP
    通过nmcli connection show可查看网络连接配置,结合grep过滤IP:

    linux如何获得本机内网ip

    nmcli connection show --active | grep 'eth0' | xargs -n 1 nmcli connection show | grep 'ipv4.addresses' | awk '{print $2}'  

通过编程方式获取内网IP

在自动化运维或开发场景中,可能需要通过脚本或程序获取内网IP,以下是Python和Shell脚本的示例方法。

Python脚本(使用socketnetifaces库)

  • 方法1:使用socket库(简单但可能不准确)

    import socket  
    try:  
        ip = socket.gethostbyname(socket.gethostname())  
        if not ip.startswith('127.'):  
            print(ip)  
    except:  
        pass  

    注意:此方法可能因主机名解析问题返回公网IP或127.x.x.x,需结合其他方法验证。

  • 方法2:使用netifaces库(推荐,更可靠)
    首先安装库:pip install netifaces
    脚本示例:

    import netifaces  
    def get_internal_ip():  
        internal_ips = []  
        interfaces = netifaces.interfaces()  
        for iface in interfaces:  
            if iface == 'lo':  
                continue  
            addrs = netifaces.ifaddresses(iface)  
            if netifaces.AF_INET in addrs:  
                for addr_info in addrs[netifaces.AF_INET]:  
                    ip = addr_info['addr']  
                    if ip.startswith(('10.', '172.', '192.168.')):  
                        internal_ips.append((iface, ip))  
        return internal_ips  
    if __name__ == '__main__':  
        for iface, ip in get_internal_ip():  
            print(f"Interface: {iface}, Internal IP: {ip}")  

Shell脚本(结合ip命令)

#!/bin/bash  
get_internal_ips() {  
    ip addr show | grep -E 'inet (10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.)' | awk '{print $2}' | cut -d/ -f1  
}  
for ip in $(get_internal_ips); do  
    echo "Internal IP: $ip"  
done  

不同获取方法的对比

为方便选择合适的方法,以下通过表格总结常见命令的特点:

方法 命令示例 是否需要root 输出格式 适用场景 注意事项
ifconfig ifconfig eth0 | grep 'inet ' 接口名+IP(如eth0: 192.168.1.100 传统系统、快速查看 需安装net-tools,旧版系统
ip ip addr show eth0 | grep 'inet ' IP/子网(如168.1.100/24 现代Linux系统、推荐使用 默认安装,功能全面
配置文件读取 grep 'address' /etc/network/interfaces 纯IP(如168.1.100 静态IP配置、自动化脚本 仅适用于静态IP,需知道文件路径
nmcli nmcli device show eth0 | grep 'IP4.ADDRESS' IP/子网(如168.1.100/24 NetworkManager管理的系统 适合桌面系统和CentOS 7+
Python脚本 netifaces库获取 接口名+IP(列表形式) 开发、自动化运维 需安装第三方库,可扩展性强

相关问答FAQs

问题1:为什么使用ifconfig命令时看不到任何IP地址输出?

解答:可能的原因有以下几种:

  1. net-tools未安装:新版Linux系统(如Ubuntu 20.04+、CentOS 8+)默认不安装ifconfig,需通过sudo apt install net-tools(Debian/Ubuntu)或sudo yum install net-tools(CentOS/RHEL)安装。
  2. 网卡未启动:执行ifconfig时若显示eth0: ERROR while getting interface flags: No such device,说明网卡未激活,可通过sudo ifconfig eth0 up启动,或使用systemctl restart networking(Debian/Ubuntu)重启网络服务。
  3. 网卡名称错误:虚拟化或新硬件中网卡名称可能不是eth0,而是ens33enp0s3等,可通过ip link查看所有网卡名称。
  4. DHCP未获取到IP:若系统使用DHCP动态获取IP,但DHCP服务器未响应或配置错误,可能导致无IP,可通过sudo dhclient eth0手动获取IP,或检查/var/log/syslog(Debian/Ubuntu)或/var/log/messages(CentOS/RHEL)查看DHCP错误日志。

问题2:如何在脚本中只获取某个特定网卡的IPv4内网IP,并排除虚拟网卡和回环接口?

解答:可通过ip命令结合grepawk实现,例如获取eth0的内网IP并排除docker0virbr0等虚拟网卡:

ip addr show eth0 | grep -E 'inet [0-9]' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d/ -f1  

命令解析:

  • ip addr show eth0:查看eth0接口的IP信息;
  • grep -E 'inet [0-9]':匹配IPv4地址(排除IPv6);
  • grep -v '127.0.0.1':排除回环地址;
  • awk '{print $2}':提取IP/子网掩码字段;
  • cut -d/ -f1:去除子网掩码,仅保留IP地址。

若需排除更多虚拟网卡(如docker0virbr0),可在grep -v中添加接口名:

ip addr show eth0 | grep -E 'inet [0-9]' | grep -v '127.0.0.1|docker0|virbr0' | awk '{print $2}' | cut -d/ -f1  

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31701.html

(0)
酷番叔酷番叔
上一篇 2025年9月28日 09:14
下一篇 2025年9月28日 09:37

相关推荐

  • Linux系统如何正确删除用户账户?

    在Linux系统中,用户管理是系统维护的重要环节,删除无用或过期的用户不仅能提升系统安全性,还能优化资源占用,删除用户看似简单,但涉及用户文件、权限配置、进程管理等细节,需谨慎操作以避免系统异常,本文将详细讲解Linux系统中删除用户的完整流程、注意事项及进阶技巧,基础删除方法:使用userdel命令Linux……

    2025年8月29日
    2900
  • 桌面用户怎样通过图形界面设置?

    在Linux系统中将界面语言切换为英文显示,是用户常见的需求,无论是误设了其他语言,还是需要在英文环境下工作,以下提供两种可靠方法(图形界面和终端命令),适用于大多数主流发行版(如Ubuntu、Debian、CentOS、Fedora),操作前请确保拥有管理员权限,打开系统设置点击桌面左上角「Applicati……

    2025年7月30日
    3700
  • Linux Makefile如何执行?

    在Linux系统中,Makefile是自动化构建的核心工具,它通过定义目标文件、依赖关系和生成规则,简化了编译、链接等重复性操作,Makefile的执行过程本质上是make工具读取并解析Makefile文件,根据依赖关系判断哪些文件需要重新生成,并执行对应的命令,下面详细说明Makefile的执行流程、关键要素……

    2025年9月24日
    2200
  • firewalld状态怎么查?

    firewalld是Linux系统的动态防火墙管理工具,支持区域划分、服务定义,允许运行时更新规则并区分运行时与永久配置。

    2025年7月7日
    4900
  • hv如何在线迁移Linux系统?在线迁移方法详解?

    在线迁移Linux虚拟机是Hyper-V环境中实现业务连续性的重要操作,通过零停机或短时间停机的方式将运行中的Linux虚拟机从源主机迁移至目标主机,可有效避免服务中断,适用于负载均衡、主机维护等场景,以下是详细的操作流程及注意事项,环境准备与前置要求在线迁移前需确保源主机与目标主机满足基础条件,这是迁移成功的……

    2025年10月7日
    1200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信