Linux 获取本地ip

本文介绍了一种使用C语言通过系统调用获取本地网络接口的IP地址的方法,包括初始化套接字、设置接口名称、执行ioctl系统调用等步骤,并提供了完整的源代码示例。

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

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <arpa/inet.h>
#include <errno.h>


#define ETH_NAME        "eth0"
unsigned int get_local_ip()
{
int sock;
struct sockaddr_in sin;
struct ifreq ifr;


sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
{
perror("socket");
return -1;                
}

strcpy((char*)&ifr.ifr_name, "eth0");
if(ioctl(sock, SIOCGIFADDR, &ifr) < 0)
{
perror("ioctl");
return -1;
}


memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
  
printf("----------->>%s\n", inet_ntoa(sin.sin_addr));
   return (*(unsigned int*)&sin.sin_addr);
     
}
int main()
{



       printf("------>>>>0x%x\n", get_local_ip());
        return 0;
}
### 如何在 Linux 系统中查看本地 IP 地址 在 Linux 系统中有多种方法可以查看本地 IP 地址。以下是几种常用的方式: #### 使用终端命令 1. **`ifconfig` 命令** `ifconfig` 是一个常用的工具,它可以显示网络接口的详细信息,包括 IPv4 和 IPv6 地址。如果系统支持该命令,可以通过以下方式运行: ```bash ifconfig ``` 输出中会列出所有活动网络接口及其配置信息[^2]。 2. **`ip addr` 或 `ip address` 命令** 在较新的 Linux 发行版中,推荐使用 `ip` 工具替代过时的 `ifconfig`。通过以下命令可查看 IP 地址: ```bash ip addr show ``` 此命令提供了更详细的网络接口状态信息,并且适用于大多数现代 Linux 环境[^1]。 3. **`hostname -I` 命令** 该命令可以直接打印出与主机名绑定的所有 IP 地址: ```bash hostname -I ``` 它是一个简单快捷的方法来获取本机的私有 IP 地址列表[^2]。 4. **`nmcli dev show` 命令** 对于由 NetworkManager 控制网络连接的情况,可以利用 `nmcli` 查询相关信息: ```bash nmcli dev show ``` 结果里包含了各个网卡的状态以及分配给它们的 IP 数据。 5. **`curl ifconfig.me` 方法** 当需要知道公网出口地址而非局域网内部编号时,可通过访问外部服务实现这一点。例如执行下面这条语句将会返回当前机器对外可见的那个唯一标识符——即广义上的“外网IP”: ```bash curl ifconfig.me ``` 不过需要注意的是这种方法依赖有效的Internet链接才能成功完成操作[^2]。 6. **`ip route get 1` 技巧** 另一种间接取得本地IPv4的办法就是借助路由表查询功能: ```bash ip route get 1 | grep src | cut -d ' ' -f 7 ``` 这里的逻辑是从目标为任意单播地址(这里选用了最简单的形式‘1’)所经过路径当中提取源端点部分作为最终答案呈现出来。 #### 图形界面法 对于那些偏好GUI而不是CLI交互风格的人来说,则可以选择经由桌面环境进入相应选项卡手动查阅相关内容项。比如,在基于GNOME的工作台上依次点击左上角启动器图标->搜索栏输入"Settings"(或者中文环境下对应表述)->导航至Network分类下找到Wired标签页就能看见所需的数值了[^3]。 以上便是关于怎样确定一台处于Linux操作系统控制下的计算装置其实际使用的协议层面上具体定位编码集合的一些常见途径介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值