Linux获取本机的IP的几种方式

本文介绍五种不同的Linux命令,用于获取网络接口的广播地址。通过使用ifconfig命令结合grep、cut、awk等工具,展示了如何利用Linux管道技术高效地提取所需信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

共计五条命令,使用的方式都不同,但原理相同充分利用LInux管道技术

[root@vagrant-centos65 ~]# ifconfig eth0 |grep Bcast |cut -d ":" -f2|cut -d " " -f1
192.168.191.2
[root@vagrant-centos65 ~]# ifconfig |grep Bcast |awk -F'[ :]+' '{print $4}'
192.168.191.2
[root@vagrant-centos65 ~]# ifconfig |grep "inet addr:" |grep -v "127.0.0.1" |cut -d: -f2 |awk '{print $1}'
192.168.191.2
[root@vagrant-centos65 ~]# ifconfig -a |grep inet |grep -v 127.0.0.1 |grep -v inet6|awk '{print $2}' |tr -d "addr:"
192.168.191.2
[root@vagrant-centos65 ~]# ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'
192.168.191.2
### 获取Linux系统中的本地IP地址 在 Linux 系统中,有多种方式可以获取本机IP 地址。以下是几种常见的实现方法: #### 方法一:通过 `getifaddrs` 函数编程 为了使用 C/C++ 编程的方式获取本地 IP 地址,可以调用 `getifaddrs` 函数并引入必要的头文件[^1]。此函数会返回当前主机上所有网络接口的相关信息。 下面是一个简单的代码示例用于展示如何利用该函数获取 IPv4 和 IPv6 的地址: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <ifaddrs.h> #include <netinet/in.h> void get_ip_addresses() { struct ifaddrs *interfaces = NULL; void *tmp_addr_ptr = NULL; getifaddrs(&interfaces); for (struct ifaddrs *ifa = interfaces; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr || !(ifa->ifa_flags & IFF_UP)) continue; if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IPv4 tmp_addr_ptr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; char address_buffer[INET_ADDRSTRLEN]; inet_ntop(AF_INET, tmp_addr_ptr, address_buffer, INET_ADDRSTRLEN); printf("%s IPv4 Addr: %s\n", ifa->ifa_name, address_buffer); } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IPv6 tmp_addr_ptr = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; char address_buffer[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, tmp_addr_ptr, address_buffer, INET6_ADDRSTRLEN); printf("%s IPv6 Addr: %s\n", ifa->ifa_name, address_buffer); } } freeifaddrs(interfaces); // Free memory allocated by getifaddrs() } int main(void){ get_ip_addresses(); return EXIT_SUCCESS; } ``` #### 方法二:通过 Shell 脚本命令行工具 如果不需要编写程序而只是想快速查看本机 IP 地址,则可以直接运行一些常用的 shell 命令来完成这一操作[^2]。 ##### 使用 `ifconfig` 或者更现代替代品 `ip addr show` 一种传统做法是借助于 `ifconfig` 工具配合正则表达式筛选出所需数据: ```bash ip=$(ifconfig | grep -E 'inet [0-9]+' | awk '{print $2}') echo "本机 IP 地址为:${ip}" ``` 然而,在较新的发行版里可能已经弃用了 `ifconfig`, 推荐改用更为强大的 `ip` 实用程序代替之: ```bash ip_address=$(ip addr show dev eth0 scope global | grep -Po '(?<=inet\s)\d+(\.\d+){3}' ) echo "${ip_address}" ``` 这里假设目标网卡名称叫作 `eth0`; 如果不确定具体名字的话可以用 `ip link list` 查看全部可用设备列表. 另外还有一种简便途径就是依靠内置功能更强悍的 `hostname` 指令直接解析绑定到 loopback 外部的真实公网映射位置(如果有配置DNS服务器支持反向查询): ```bash public_ip=$(hostname -I | cut -f1 -d' ') printf "%s\n" "$public_ip" ``` 以上三种技术手段均能有效达成目的,选择哪一种取决于实际应用场景和个人偏好等因素影响下的权衡考量结果。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值