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

相关推荐

  • How to Adjust Font Size in Linux English?

    Linux offers flexible options to customize font sizes across different desktop environments and applications. Follow these precise methods based on your sys……

    2025年8月4日
    14900
  • Linux创建进程的核心系统调用是什么?

    Linux创建进程的核心系统调用是fork(),它通过复制调用进程(父进程)创建一个新进程(子进程),随后通常调用execve()系列函数加载并执行新程序,替换子进程的地址空间。

    2025年7月24日
    14700
  • 如何安装ksh?

    KornShell (ksh) 是 Linux 环境中功能强大的 Unix shell,由 David Korn 开发,兼具 Bourne shell (sh) 的兼容性和 C shell (csh) 的交互特性(如命令行编辑),以下是 Linux 用户使用 ksh 的完整指南:不同 Linux 发行版的安装命……

    2025年7月26日
    14400
  • Linux中安装软件有哪些常用方法?具体步骤是怎样的?

    在Linux系统中,安装软件的方式多样,不同方法适用于不同场景,主要取决于发行版、软件需求及个人偏好,以下是几种常见安装方式的详细说明:通过包管理器安装(主流方式)包管理器是Linux发行版自带的核心工具,用于自动下载、安装、更新和卸载软件,并处理依赖关系,是最安全、便捷的方式,不同发行版的包管理器不同,需根据……

    2025年9月22日
    13300
  • Linux中如何设置环境变量?详细步骤与方法是什么?

    在Linux系统中,环境变量是操作系统和运行程序用来存储配置信息的机制,它们定义了用户shell的行为以及程序运行的环境,正确设置环境变量对于系统管理、软件开发和日常使用都至关重要,例如PATH变量决定了系统在哪些目录中查找可执行文件,HOME变量指定了用户的主目录,LANG变量控制系统的语言环境等,本文将详细……

    2025年8月31日
    15600

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信