0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【网络编程】从ifconfig命令中取得机器的ip地址

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-08-31 13:15 次阅读

熟悉Linux命令行的童鞋都知道,ifconfig命令可以列出当前机器所有网络设备节点对应的IP地址,如下示例所示;

img点击并拖拽以移动

编辑

我们在实际的编程代码中,也需要通过代码来获取本地的IP地址,那么有没有办法,直接在代码中调用【ifconfig】命令行来获取本地的IP地址呢?

答案肯定是有的,本文将给你正确的答案,请按下面的示例代码:

#include 
#include 

int shell_cmd_excute(const char *cmd, char *result, int size)
{
    int ret;
    FILE *fp = NULL;

    fp = popen(cmd, "r");
    if (!fp) {
        perror("popen error: ");
        ret = -1;
        goto exit_entry;    
    }

    ret = fread(result, 1, size, fp);       
    if (ret <= 0) {
        perror("fread error: ");
        ret = -2;
        goto exit_entry;
    }
    if (ret > 1 && ret < size && (result[ret-1] == '\r' || result[ret-1] == '\n')) {
        result[ret-1] = '\0';
    }	    
    ret = 0;

exit_entry:
    if (fp) {
        fclose(fp);    
    }
    return ret;	
}

int get_local_ip_by_ifconfig(const char *interface, char *ip, int size)
{
    int ret;
    char cmd[128];    

    snprintf(cmd, sizeof(cmd), "ifconfig %s | sed -nr 's/.*inet (addr:)?(([0-9]*\\.){3}[0-9]*).*/\\2/p'", interface);
    printf("shell cmd: %s\n", cmd);

    ret = shell_cmd_excute(cmd, ip, size);
    return ret;
}

int main(int argc, const char **argv)
{
    int ret;
    const char *interface;
    char local_ip[128];

    if (argc < 2) {
        printf("Error param input !\n");
        printf("Usage: %s [interface]\n", argv[0]); 
        printf("[interface]: network logic interface, like eth0/ppp0/wlan0/lo ...\n");  
	exit(-1);     
    }

    interface = argv[1];
    ret = get_local_ip_by_ifconfig(interface, local_ip, sizeof(local_ip));
    if (!ret) {
        printf("Get local ip OK, ip = %s\n", local_ip);    
    } else {
        printf("Get local ip FAIL !\n");
    }

    return ret;
}

代码编译:

gcc -o ifconfig_ip ifconfig_ip.c 

代码运行测试:

img

因笔者的Linux环境只有eth0和lo这2个网络设备节点,没有wlan0、ppp0这两个网络设备节点,所以wlan0节点和ppp0这2个节点测试报错了,而eth0和lo可以得到正确的IP地址,与文章开头的ifconfig输出是保持一致的。

以上测试代码是笔者在平时工作中积累的代码,可直接用于生产环境。使用过程,若发现问题,欢迎随时交流讨论,互相提高。谢谢。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206745
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • 网络编程
    +关注

    关注

    0

    文章

    64

    浏览量

    9982
收藏 人收藏

    评论

    相关推荐

    如何查看本机器ip地址

    如何查看本机器ip地址网卡在使用中有两类地址,一类是大家都熟悉的IP地址,另一类就是MAC
    发表于 10-11 23:48

    NanoPi NEO - 使用命令行查看IP 地址和主机名 - 04

    : NanPi NEO已成功运行UbuntuCore系统,并且保证NEO能联网。1).打开终端,输入以下命令,即可查看NanoPi NEO 的IP 地址:#ifconfig eth0
    发表于 05-06 13:50

    Linux如何配置IP地址

    ifconfig命令:查看与配置网络状态的命令// 查看当前计算机所有网卡的配置信息#ifconfig// 查看某网卡的配置信息,如eth0
    发表于 07-15 07:25

    如何实现A40i开发板通过ifconfig改变的ip地址

    A40i开发板,通过ifconfig改变的ip地址,重启后就变成auto_config_network默认的ip
    发表于 12-31 06:26

    ifconfig改变IP地址重启后变成默认地址是为什么?

    [td]A40i开发板,通过ifconfig改变的ip地址,重启后就变成auto_config_network默认的ip
    发表于 01-13 06:31

    如何使用命令行配置Yocto网络

    ifconfig 命令来更改 ip 地址,但在重新启动后它又回到了 dhcp。1. 更改ip地址
    发表于 04-06 06:14

    如何用DOS命令查看自己的IP地址

    P地址IP协议提供的一种统一的地址格式,互联网上的每一个网络和每一台电脑都有一个逻辑地址,说的通俗一点
    发表于 01-17 15:50 1.2w次阅读
    如何用DOS<b class='flag-5'>命令</b>查看自己的<b class='flag-5'>IP</b><b class='flag-5'>地址</b>

    linux的ip命令旨在取代ifconfig

    linux的ip命令ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令
    的头像 发表于 02-02 16:07 2800次阅读
    linux的<b class='flag-5'>ip</b><b class='flag-5'>命令</b>旨在取代<b class='flag-5'>ifconfig</b>

    网络通信技术:IP地址和MAC地址的差异

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址。 那么
    的头像 发表于 10-22 15:12 4482次阅读
    <b class='flag-5'>网络</b>通信技术:<b class='flag-5'>IP</b><b class='flag-5'>地址</b>和MAC<b class='flag-5'>地址</b>的差异

    linux系统查看ip地址命令

    在Linux系统中,可以使用ifconfig命令来查看IP地址ifconfig命令被用于配置和
    的头像 发表于 11-08 15:09 1281次阅读

    linux查看物理接口的命令

    显示和配置网络接口。它可以显示当前系统上的所有网络接口及其配置信息。以下是ifconfig命令的用法和输出示例: ifconfig -a 这
    的头像 发表于 11-16 16:48 509次阅读

    CentOS7系统网络配置命令

    们来配置网络接口、IP地址、网关、DNS服务器等。 查看网络接口(ifconfig命令):
    的头像 发表于 11-17 11:07 2694次阅读

    ifconfig配置静态ip命令

    ifconfig命令用于配置和管理网络接口,包括接口的IP地址、子网掩码、网关、以及其他网络配置
    的头像 发表于 11-27 14:31 1936次阅读

    linux更改ip步骤命令

    Linux更改IP地址的步骤和相关命令。 步骤一:查看当前网络配置 在更改IP地址之前,首先需要
    的头像 发表于 11-27 14:38 810次阅读

    linux系统修改ip命令

    Linux系统修改IP命令是掌握Linux网络管理的基础之一。在Linux操作系统中,我们可以使用命令行工具来实现对IP
    的头像 发表于 11-27 15:17 1165次阅读