21xrx.com
2024-12-22 22:22:33 Sunday
登录
文章检索 我的文章 写文章
Linux C++:如何获取本机IP地址
2023-06-28 09:50:41 深夜i     --     --
Linux C++ IP地址 获取

在Linux C++中,获取本机IP地址是一个常见而重要的任务。本文将介绍几种获取本机IP地址的方法。

1.使用getifaddrs函数

getifaddrs函数可用于获取本机IP地址,其中的ifaddrs结构体包含了网络接口信息。

示例代码:


#include <stdio.h>

#include <ifaddrs.h>

#include <netinet/in.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)

      continue;

    if (ifa->ifa_addr->sa_family == AF_INET)

    {

      tmpAddrPtr = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;

      char addressBuffer[INET_ADDRSTRLEN];

      inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);

      printf("%s IP Address: %s\n", ifa->ifa_name, addressBuffer);

    }

  }

  if (ifAddrStruct != NULL)

    freeifaddrs(ifAddrStruct);

  return 0;

}

该代码会遍历所有网络接口,找到IPv4地址并打印到控制台。

2.使用ioctl函数

ioctl函数可用于修改设备参数,也可以用于获取网卡信息,包括IP地址等。

示例代码:


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <sys/ioctl.h>

#include <net/if.h>

#include <netinet/in.h>

int main(int argc, char **argv)

{

  int fd;

  struct ifreq ifr;

  char *iface = "eth0";

  fd = socket(AF_INET, SOCK_DGRAM, 0);

  ifr.ifr_addr.sa_family = AF_INET;

  strncpy(ifr.ifr_name, iface, IFNAMSIZ-1);

  ioctl(fd, SIOCGIFADDR, &ifr);

  close(fd);

  printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));

  return 0;

}

该代码是使用ioctl函数来获取eth0网卡的IP地址并打印到控制台。

总结:

本文介绍了两种获取本机IP地址的方法,getifaddrs函数和ioctl函数。使用getifaddrs函数可以遍历所有网络接口并获取IPv4地址。使用ioctl函数可以指定网卡接口获取IP地址。根据自己的需要选择合适的方法即可。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复