iOS开发-获取设备IP
2017-08-24 08:51
302 查看
获取设备IP的具体方法
#import<sys/sockio.h>
#import<sys/ioctl.h>
#import<net/if.h>
#import<arpa/inet.h>
{
int sockfd =socket(AF_INET,SOCK_DGRAM,0);
// if (sockfd <</span> 0) return nil;
NSMutableArray *ips = [NSMutableArrayarray];
int BUFFERSIZE =4096;
structifconf
ifc;
char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ],
*cptr;
structifreq
*ifr, ifrcopy;
ifc.ifc_len
= BUFFERSIZE;
ifc.ifc_buf
= buffer;
if (ioctl(sockfd,SIOCGIFCONF,
&ifc) >= 0){
for (ptr = buffer; ptr < buffer + ifc.ifc_len;
){
ifr = (structifreq
*)ptr;
int
len =sizeof(structsockaddr);
if
(ifr->ifr_addr.sa_len
> len) {
len = ifr->ifr_addr.sa_len;
}
ptr +=sizeof(ifr->ifr_name)
+ len;
if
(ifr->ifr_addr.sa_family
!=AF_INET)continue;
if
((cptr = (char *)strchr(ifr->ifr_name,':'))
!= NULL) *cptr =0;
if
(strncmp(lastname, ifr->ifr_name,IFNAMSIZ)
== 0)continue;
memcpy(lastname,
ifr->ifr_name,IFNAMSIZ);
ifrcopy = *ifr;
ioctl(sockfd,SIOCGIFFLAGS,
&ifrcopy);
if
((ifrcopy.ifr_flags &IFF_UP)
==0)continue;
NSString
*ip = [NSStringstringWithFormat:@"%s",inet_ntoa(((structsockaddr_in
*)&ifr->ifr_addr)->sin_addr)];
[ipsaddObject:ip];
}
}
close(sockfd);
NSString *deviceIP =@"";
for (int
i=0; i < ips.count;
i++)
{
if (ips.count
>0)
{
deviceIP = [NSStringstringWithFormat:@"%@",ips.lastObject];
}
}
myIP = deviceIP;
NSLog(@"deviceIP========%@",deviceIP);
return deviceIP;
}
1.导入头文件
#import<sys/socket.h>#import<sys/sockio.h>
#import<sys/ioctl.h>
#import<net/if.h>
#import<arpa/inet.h>
2.具体实现方法
- (NSString *)getDeviceIPIpAddresses{
int sockfd =socket(AF_INET,SOCK_DGRAM,0);
// if (sockfd <</span> 0) return nil;
NSMutableArray *ips = [NSMutableArrayarray];
int BUFFERSIZE =4096;
structifconf
ifc;
char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ],
*cptr;
structifreq
*ifr, ifrcopy;
ifc.ifc_len
= BUFFERSIZE;
ifc.ifc_buf
= buffer;
if (ioctl(sockfd,SIOCGIFCONF,
&ifc) >= 0){
for (ptr = buffer; ptr < buffer + ifc.ifc_len;
){
ifr = (structifreq
*)ptr;
int
len =sizeof(structsockaddr);
if
(ifr->ifr_addr.sa_len
> len) {
len = ifr->ifr_addr.sa_len;
}
ptr +=sizeof(ifr->ifr_name)
+ len;
if
(ifr->ifr_addr.sa_family
!=AF_INET)continue;
if
((cptr = (char *)strchr(ifr->ifr_name,':'))
!= NULL) *cptr =0;
if
(strncmp(lastname, ifr->ifr_name,IFNAMSIZ)
== 0)continue;
memcpy(lastname,
ifr->ifr_name,IFNAMSIZ);
ifrcopy = *ifr;
ioctl(sockfd,SIOCGIFFLAGS,
&ifrcopy);
if
((ifrcopy.ifr_flags &IFF_UP)
==0)continue;
NSString
*ip = [NSStringstringWithFormat:@"%s",inet_ntoa(((structsockaddr_in
*)&ifr->ifr_addr)->sin_addr)];
[ipsaddObject:ip];
}
}
close(sockfd);
NSString *deviceIP =@"";
for (int
i=0; i < ips.count;
i++)
{
if (ips.count
>0)
{
deviceIP = [NSStringstringWithFormat:@"%@",ips.lastObject];
}
}
myIP = deviceIP;
NSLog(@"deviceIP========%@",deviceIP);
return deviceIP;
}
相关文章推荐
- iOS开发——获取本设备IP
- iOS开发-获取设备唯一标识符(UUID)
- IOS开发之--获取设备类型和系统版本号
- iOS开发-Swift获取手机设备信息(UIDevice)
- IOS开发——获取局域网IP
- ios微信支付invalid spbill_create_ip 获取设备ip错误
- iOS开发-Object-C获取手机设备信息(UIDevice)
- IOS开发之--获取设备类型和系统版本号
- IOS开发之--获取设备类型和系统版本号
- iOS开发中获取设备唯一ID
- iOS开发-runtime获取设备电池电量
- iOS开发中怎么获取设备的唯一标识
- IOS开发——获取局域网IP
- iOS开发之获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?
- iOS开发-基础:获取设备UUID,并使用keychain存储
- [IOS 开发] 获取局域网IP
- iOS开发 获取设备UUID
- IOS 特定于设备的开发:获取额外的设备信息
- ios开发之获取版本号,部分设备信息