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

熟悉linux命令行的童鞋都知道,ifconfig命令可以列出当前机器所有网络设备节点对应的ip地址,如下示例所示;
编辑
我们在实际的编程代码中,也需要通过代码来获取本地的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 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 代码运行测试:
因笔者的linux环境只有eth0和lo这2个网络设备节点,没有wlan0、ppp0这两个网络设备节点,所以wlan0节点和ppp0这2个节点测试报错了,而eth0和lo可以得到正确的ip地址,与文章开头的ifconfig输出是保持一致的。
以上测试代码是笔者在平时工作中积累的代码,可直接用于生产环境。使用过程,若发现问题,欢迎随时交流讨论,互相提高。谢谢。


IDC:2年内将有两家PC厂商退出市场
华卓精科获8700万的战略投资 推动光刻机国产化
交互的艺术:协作机器人如何定义新一代的人机关系?
学生宿舍用电安全监控系统
小米发布,红米note 3,此款手机是小米第一款配备指纹识别的手机
【网络编程】从ifconfig命令中取得机器的ip地址
科创板西部超导独立董事雷达介绍、履历信息
Linux系统升级MySQL数据库的步骤和难题
有源晶振和无源晶振的区别
女神新选择:除了美图秀秀,还有华为荣耀V9
单片机总线中的周期概念及其时钟时间估算及编程应用示例
英迪芯获无锡高新区种子资金助力
【CES 2017】联想来搞事情了,推出全新的游戏本和一个智能语音助手
苏宁金融区块链+物联网汽车库融平台介绍
特斯拉的内华达州超级工厂日产约1300万个单体电池
捷联式惯导系统的机载安装误差对导航精度的影响研究
基于FAN6961的200W LED照明系统的电源设计
Flash和EEPROM区别差异及关系解析
海思方面明年极大可能仍将迭代推出新的麒麟芯片
上海国防动员系统助力疫情防控 消杀机器人工作效率极高