std::string GetLocalIP() { struct ifreq req; int sock_fd; char szLocalIP[16]= {0}; string strLocalIP=""; sock_fd = socket(AF_INET,SOCK_STREAM,0); if(sock_fd < 0) return strLocalIP; snprintf(req.ifr_name,IFNAMSIZ,"eth1"); if(ioctl(sock_fd,SIOCGIFADDR,(char*)&req) < 0) { close(sock_fd); return strLocalIP; } snprintf(szLocalIP,sizeof(szLocalIP)-1,inet_ntoa(((struct sockaddr_in*)(&req.ifr_addr))->sin_addr)); close(sock_fd); strLocalIP=szLocalIP; return strLocalIP; }
std::string getCurrentIP() { const char* pSzIpAddr = "0.0.0.0"; char szIpAddrBuffer[32] = {0}; struct ifaddrs* pIfAddrs; if (getifaddrs(&pIfAddrs) == 0) { for (struct ifaddrs* pIfAddr = pIfAddrs; pIfAddr; pIfAddr = pIfAddr->ifa_next) { if (pIfAddr->ifa_addr == NULL || !(pIfAddr->ifa_flags & IFF_UP) || strncmp(pIfAddr->ifa_name, "eth1", strlen("eth1")) != 0) { continue; } if (inet_ntop(pIfAddr->ifa_addr->sa_family, &((struct sockaddr_in *)pIfAddr->ifa_addr)->sin_addr, szIpAddrBuffer, sizeof(szIpAddrBuffer))) { pSzIpAddr = szIpAddrBuffer; break; } } freeifaddrs(pIfAddrs); } return std::string(pSzIpAddr); }