Skip to content

Instantly share code, notes, and snippets.

@HituziANDO
Created October 26, 2017 03:05
Show Gist options
  • Save HituziANDO/6bea9c170993859d73b27cc3a481c838 to your computer and use it in GitHub Desktop.
Save HituziANDO/6bea9c170993859d73b27cc3a481c838 to your computer and use it in GitHub Desktop.
[Obj-C] Get IP address.
//
// IPAddress.h
//
// Created by Hituzi Ando on 2017/10/26.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface IPAddress : NSObject
+ (NSString *)getCellularIPv4Address;
+ (NSString *)getCellularIPv6Address;
+ (NSString *)getWiFiIPv4Address;
+ (NSString *)getWiFiIPv6Address;
@end
NS_ASSUME_NONNULL_END
//
// IPAddress.m
//
// Created by Hituzi Ando on 2017/10/26.
//
#import <ifaddrs.h>
#import <arpa/inet.h>
#import "IPAddress.h"
@implementation IPAddress
+ (NSString *)getCellularIPv4Address {
NSString *ip;
struct ifaddrs *interfaces = NULL;
struct ifaddrs *tempAddr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) {
tempAddr = interfaces;
while (tempAddr != NULL) {
if (tempAddr->ifa_addr->sa_family == AF_INET) { // IPv4
if ([[NSString stringWithUTF8String:tempAddr->ifa_name] isEqualToString:@"pdp_ip0"]) { // Cellular
char buff[256];
memset(buff, 0, sizeof(buff));
inet_ntop(AF_INET, &((struct sockaddr_in *) tempAddr->ifa_addr)->sin_addr, buff, sizeof(buff));
ip = [NSString stringWithUTF8String:buff];
break;
}
}
tempAddr = tempAddr->ifa_next;
}
}
freeifaddrs(interfaces);
return ip;
}
+ (NSString *)getCellularIPv6Address {
NSString *ip;
struct ifaddrs *interfaces = NULL;
struct ifaddrs *tempAddr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) {
tempAddr = interfaces;
while (tempAddr != NULL) {
if (tempAddr->ifa_addr->sa_family == AF_INET6) { // IPv6
if ([[NSString stringWithUTF8String:tempAddr->ifa_name] isEqualToString:@"pdp_ip0"]) { // Cellular
char buff[256];
memset(buff, 0, sizeof(buff));
inet_ntop(AF_INET6, &((struct sockaddr_in6 *) tempAddr->ifa_addr)->sin6_addr, buff, sizeof(buff));
ip = [NSString stringWithUTF8String:buff];
break;
}
}
tempAddr = tempAddr->ifa_next;
}
}
freeifaddrs(interfaces);
return ip;
}
+ (NSString *)getWiFiIPv4Address {
NSString *ip;
struct ifaddrs *interfaces = NULL;
struct ifaddrs *tempAddr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) {
tempAddr = interfaces;
while (tempAddr != NULL) {
if (tempAddr->ifa_addr->sa_family == AF_INET) { // IPv4
if ([[NSString stringWithUTF8String:tempAddr->ifa_name] isEqualToString:@"en0"]) { // Wi-Fi
char buff[256];
memset(buff, 0, sizeof(buff));
inet_ntop(AF_INET, &((struct sockaddr_in *) tempAddr->ifa_addr)->sin_addr, buff, sizeof(buff));
ip = [NSString stringWithUTF8String:buff];
break;
}
}
tempAddr = tempAddr->ifa_next;
}
}
freeifaddrs(interfaces);
return ip;
}
+ (NSString *)getWiFiIPv6Address {
NSString *ip;
struct ifaddrs *interfaces = NULL;
struct ifaddrs *tempAddr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) {
tempAddr = interfaces;
while (tempAddr != NULL) {
if (tempAddr->ifa_addr->sa_family == AF_INET6) { // IPv6
if ([[NSString stringWithUTF8String:tempAddr->ifa_name] isEqualToString:@"en0"]) { // Wi-Fi
char buff[256];
memset(buff, 0, sizeof(buff));
inet_ntop(AF_INET6, &((struct sockaddr_in6 *) tempAddr->ifa_addr)->sin6_addr, buff, sizeof(buff));
ip = [NSString stringWithUTF8String:buff];
break;
}
}
tempAddr = tempAddr->ifa_next;
}
}
freeifaddrs(interfaces);
return ip;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment