第一步 创建一个NSObject 文件
.h 文件 写
#import <Foundation/Foundation.h>
@interface NSObject (GetIP)
+ (NSString *)deviceIPAdress;
@end
.m文件 写
#import "NSObject+GetIP.h"
#include <ifaddrs.h>
#include <arpa/inet.h>
@implementation NSObject (GetIP)
//必须在有网的情况下才能获取手机的IP地址
+ (NSString *)deviceIPAdress {
NSString *address = @"an error occurred when obtaining ip address";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) { // 0 表示获取成功
temp_addr = interfaces;
while (temp_addr != NULL) {
if( temp_addr->ifa_addr->sa_family == AF_INET) {
// Check if interface is en0 which is the wifi connection on the iPhone
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
freeifaddrs(interfaces);
NSLog(@"%@", address);
return address;
}
@end
#import "NSObject+GetIP.h"
#include <ifaddrs.h>
#include <arpa/inet.h>
#include <net/if.h>
#define IOS_CELLULAR @"pdp_ip0"
#define IOS_WIFI @"en0"
#define IOS_VPN @"utun0"
#define IP_ADDR_IPv4 @"ipv4"
#define IP_ADDR_IPv6 @"ipv6"
第三步 在你写给后台的网络请求里写入
NSString *StringIP = [NSString deviceIPAdress]; //调用方法 获取ip地址 赋值给字符串 stringIP
[params setObject:StringIP forKey:@"ipNum"]; //把ip 地址对应后台提供的参数 传给后台