熟悉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 <= 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
代码运行测试:
因笔者的Linux环境只有eth0和lo这2个网络设备节点,没有wlan0、ppp0这两个网络设备节点,所以wlan0节点和ppp0这2个节点测试报错了,而eth0和lo可以得到正确的IP地址,与文章开头的ifconfig输出是保持一致的。
以上测试代码是笔者在平时工作中积累的代码,可直接用于生产环境。使用过程,若发现问题,欢迎随时交流讨论,互相提高。谢谢。
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux
+关注
关注
87文章
11320浏览量
209839 -
命令
+关注
关注
5文章
688浏览量
22055 -
网络编程
+关注
关注
0文章
72浏览量
10084
发布评论请先 登录
相关推荐
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
ifconfig改变IP地址重启后变成默认地址是为什么?
[td]A40i开发板,通过ifconfig改变的ip地址,重启后就变成auto_config_network中默认的ip
发表于 01-13 06:31
linux查看物理接口的命令
显示和配置网络接口。它可以显示当前系统上的所有网络接口及其配置信息。以下是ifconfig命令的用法和输出示例: ifconfig -a 这
linux更改ip步骤命令
inux是一种广泛应用于服务器和嵌入式设备的操作系统,通过更改IP地址,可以对网络进行重新配置和优化,以满足不同的需求。在Linux中,可以使用不同的
评论