get_iface_ip

#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)

 
喜欢 0
分享