#include <sys/socket.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <net/if.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <unistd.h>
int GetHostIp(std::string iface_name, std::string &ip, std::string &retmsg)
{
int sockfd = -1;
struct ifreq ifr;
struct sockaddr_in *addr = NULL;
memset(&ifr, 0x0, sizeof(ifr));
strcpy(ifr.ifr_name, iface_name.c_str());
addr = (struct sockaddr_in *)&ifr.ifr_addr;
addr->sin_family = AF_INET;
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { retmsg = "GetHostIp: create socket error!"; return -1; } if (ioctl(sockfd, SIOCGIFADDR, &ifr) == 0) { ip = inet_ntoa(addr->sin_addr);
close(sockfd);
return 0;
}
else
{
retmsg = std::string("GetHostIp: can't get ") + iface_name + " ip, ioctl error!";
}
close(sockfd);
return -1;
}
int main()
{
std::string ip, retmsg;
int ret = GetHostIp("em0", ip, retmsg);
if (ret == 0)
{
std::cout << "ip: " << ip << std::endl;
}
else
{
std::cout << "errmsg: " << retmsg << std::endl;
}
}
Linux c 获取网络接口IP地址
C++ 获取本机 IP 地址 (Win+Linux)
 
get_iface_ip:等您坐沙发呢!