clinux获取本机ip

在 CLinux 中,你可以使用 ifconfig 命令来获取本机 IP 地址。ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}'

在CLinux中获取本机IP地址有多种方法,以下是几种常见的方式:

clinux获取本机ip

使用系统调用和库函数

1、通过getifaddrs函数

这是一个较为常用的方法,首先需要包含相关的头文件,如<sys/types.h><ifaddrs.h><netinet/in.h><arpa/inet.h>等。

示例代码如下:

      #include <stdio.h>
      #include <stdlib.h>
      #include <sys/types.h>
      #include <ifaddrs.h>
      #include <netinet/in.h>
      #include <arpa/inet.h>
      #include <string.h>
      int main() {
          struct ifaddrs *ifAddrStruct = NULL;
          struct ifaddrs *ifa = NULL;
          void *tmpAddrPtr = NULL;
          getifaddrs(&ifAddrStruct);
          for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
              if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
                  // is a valid IP4 Address
                  tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
                  char addressBuffer[INET_ADDRSTRLEN];
                  inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
                  if (strcmp(ifa->ifa_name, "lo") != 0) { // exclude loopback interface
                      printf("%s IP Address %s
", ifa->ifa_name, addressBuffer);
                  }
              }
          }
          if (ifAddrStruct != NULL) freeifaddrs(ifAddrStruct);
          return 0;
      }

上述代码中,getifaddrs函数会返回一个链表,其中包含了本机的所有网络接口信息,通过遍历这个链表,判断接口类型是否为AF_INET(即IPv4地址),然后使用inet_ntop函数将二进制的IP地址转换为点分十进制的字符串形式进行输出,同时排除了回环接口(通常名字为lo)。

2、使用ioctl函数

先包含必要的头文件,如<sys/ioctl.h><netinet/in.h><net/if.h><unistd.h><arpa/inet.h>等。

示例代码如下:

clinux获取本机ip

      #include <stdio.h>
      #include <string.h>
      #include <sys/ioctl.h>
      #include <netinet/in.h>
      #include <net/if.h>
      #include <unistd.h>
      #include <arpa/inet.h>
      int get_localip(const char *eth_name, char *local_ip_addr) {
          int ret = -1;
          int fd;
          struct ifreq ifr;
          if (local_ip_addr == NULL || eth_name == NULL) {
              return ret;
          }
          if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) > 0) {
              strcpy(ifr.ifr_name, eth_name);
              if (!ioctl(fd, SIOCGIFADDR, &ifr)) {
                  ret = 0;
                  strcpy(local_ip_addr, inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
              }
          }
          if (fd > 0) {
              close(fd);
          }
          return ret;
      }
      int main() {
          char local_ip[20] = {0};
          if (get_localip("eth0", local_ip) == 0) {
              printf("local ip:%s
", local_ip);
          } else {
              printf("get local ip failure
");
          }
          return 0;
      }

这段代码中,首先创建一个套接字,然后通过ioctl函数的SIOCGIFADDR选项获取指定网络接口(这里是eth0)的IP地址,并将其转换为字符串存储到local_ip数组中,最后关闭套接字并返回结果。

使用命令行工具(在C程序中调用)

1、使用ifconfig命令

可以在C程序中使用system函数调用ifconfig命令来获取本机IP地址。

      #include <stdlib.h>
      int main() {
          system("ifconfig");
          return 0;
      }

执行上述代码后,会在终端中显示本机所有网络接口的详细信息,包括IP地址等,然后可以通过解析命令的输出来提取所需的IP地址信息。

2、使用ip命令

同样可以使用system函数调用ip命令,如:

      #include <stdlib.h>
      int main() {
          system("ip addr");
          return 0;
      }

ip addr命令会显示更详细的网络接口信息,也可以从中解析出本机的IP地址。

clinux获取本机ip

3、使用hostname命令

      #include <stdlib.h>
      int main() {
          system("hostname -I");
          return 0;
      }

此命令会直接输出本机的IP地址,无需额外解析。

在CLinux中获取本机IP地址的方法有多种,开发者可以根据自己的需求和实际情况选择合适的方法来实现。

以上就是关于“clinux获取本机ip”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/808432.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seoK-seo
Previous 2025-03-15 09:57
Next 2025-03-15 10:03

相关推荐

  • cdn数据控制_CDN是否支持频次控制?

    是的,CDN支持频次控制。通过设置缓存策略和访问频率限制,可以有效控制用户对资源的访问次数。

    2024-06-19
    097
  • vue预渲染prerender

    Vue预渲染是一种在服务器端预先渲染HTML页面的技术,它可以提高首屏加载速度,提升用户体验,在Vue项目中,我们可以通过配置webpack来实现预渲染,本文将详细介绍Vue预渲染的原理、配置方法以及优化策略。1. Vue预渲染原理Vue预渲染的核心思想是在服务器端生成一个完整的HTML页面,然后将这个页面发送给客户端,当用户访问网站……

    2023-12-02
    0175
  • 为什么qq好友的说说不能转发给别人

    在网络社交中,QQ作为一款非常受欢迎的即时通讯软件,其功能丰富,用户众多,QQ好友的说说是用户分享生活、交流心情的重要平台,有些用户可能会发现,他们无法转发QQ好友的说说,这是为什么呢?我们需要了解QQ说说的转发机制,在QQ中,用户可以发布说说,这些说说可以被其他用户看到,也可以被转发,转发说说的过程实际上是将说说的内容复制一份,然后……

    2024-03-23
    0115
  • 如何有效避免async/await地狱?详解来啦!

    async/await地狱该如何避免详解在现代JavaScript开发中,async/await语法为我们提供了一种更简洁、直观的方式来处理异步操作,如果使用不当,它可能会导致所谓的“async/await地狱”,即代码中充斥着大量的await语句,使得代码变得难以阅读和维护,本文将详细解释什么是async/a……

    2024-11-15
    03
  • cdn电信_内容分发网络 CDN

    CDN是内容分发网络,通过将网站内容缓存到全球各地的服务器上,提高访问速度和稳定性。

    2024-06-17
    0100
  • 如何实现服务器与外网域名的绑定访问?

    服务器绑定外网域名访问在当今的数字化时代,将服务器与外网域名绑定是企业和个人网站运营中不可或缺的一步,这不仅有助于提高网站的可访问性,还能增强品牌的专业形象,本文将详细介绍服务器绑定外网域名的过程、注意事项以及常见问题解答,帮助您顺利完成这一关键步骤,一、服务器绑定外网域名的基本步骤(一)选择合适的域名1、域名……

    帮助中心 2024-12-05
    011

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入