在Linux系统中获取本机IP地址是一个常见的需求,无论是进行网络配置、故障排查还是其他网络相关的操作,本文将详细介绍如何在Linux系统下获取本机IP地址的方法,包括使用命令行工具以及通过编程语言实现的方式。
一、使用命令行工具获取本机IP地址

1. ifconfig命令
ifconfig是一个传统的网络配置工具,可以显示或配置网络接口的参数,要查看所有网络接口的IP地址,可以使用以下命令:
ifconfig
输出示例如下:
eth0 Link encap:Ethernet HWaddr 00:1A:2B:3C:4D:5E
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::21a:2bff:fe3c:4d5e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5678 errors:0 dropped:0 overruns:0 frame:0
TX packets:4321 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:678901 (678.9 KiB) TX bytes:345678 (345.6 KiB)从上述输出中可以看到,eth0接口的IPv4地址是192.168.1.100。
2. ip命令
ip命令是现代Linux系统中推荐使用的工具,功能更强大且输出更加详细,要查看所有网络接口的IP地址,可以使用以下命令:
ip addr show
或者简写为:
ip a
输出示例如下:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86399sec preferred_lft 86399sec
inet6 fe80::21a:2bff:fe3c:4d5e/64 scope link
valid_lft forever preferred_lft forever从上述输出中可以看到,eth0接口的IPv4地址是192.168.1.100。

3. hostname命令
hostname命令可以用来获取主机名,而hostname -I则可以获取所有网络接口的IP地址(仅适用于某些发行版)。
hostname -I
输出示例如下:
192、168.1.100 10.0.0.1
这个命令会列出所有网络接口的IPv4地址。
二、通过编程语言获取本机IP地址
1. Python脚本
Python是一种广泛使用的编程语言,可以轻松获取本机的IP地址,以下是一个示例脚本:
import socket
def get_ip_address():
hostname = socket.gethostname()
ip_address = socket.gethostbyname(hostname)
return ip_address
if __name__ == "__main__":
print("本机IP地址:", get_ip_address())运行上述脚本,将输出类似如下的结果:
本机IP地址: 192.168.1.100
2. C语言程序
C语言也可以通过调用系统API来获取本机的IP地址,以下是一个示例程序:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
int main() {
char hostname[1024];
struct hostent *he;
struct in_addr **addr_list;
int i;
if (gethostname(hostname, sizeof(hostname)) == -1) {
perror("gethostname");
return 1;
}
he = gethostbyname(hostname);
if (he == NULL) {
perror("gethostbyname");
return 1;
}
addr_list = (struct in_addr **) he->h_addr_list;
for (i = 0; addr_list[i] != NULL; i++) {
printf("%s
", inet_ntoa(*addr_list[i]));
}
return 0;
}编译并运行上述程序,将输出类似如下的结果:
192、168.1.100
三、常见问题与解答
问题1:如何只获取第一个网络接口的IP地址?
解答: 在使用ip命令时,可以通过指定接口名称来只获取特定接口的IP地址,要获取eth0接口的IP地址,可以使用以下命令:
ip addr show eth0 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1这将输出eth0接口的IPv4地址。
问题2:如何通过Python脚本获取特定的网络接口的IP地址?
解答: 可以通过使用socket模块中的getaddrinfo函数来获取特定接口的IP地址,以下是一个示例脚本:
import socket
def get_ip_address(interface):
info = socket.if_nametoindex(interface)
address = socket.inet_ntoa(socket.if_indextoname(info))
return address
if __name__ == "__main__":
interface = 'eth0'
print(f"{interface}接口的IP地址:", get_ip_address(interface))运行上述脚本,将输出类似如下的结果:
eth0接口的IP地址: 192.168.1.100
小伙伴们,上文介绍了“c获取本机iplinux”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/1216.html<
