苹果ios下获取设备的IP地址几种方法

要获取设备的IP地址,网上随便一搜就能找到一大堆结果,但是这些能找到的代码基本上都是用C写的,并没有针对iOS做过优化调整,使用起来也不方便。就只是要获取IP地址而已,封装成一个函数调用一下然后使用起来才方便。代码比较简单,就是把网上抄来的代码做了整理和iOS适配。函数返回一个包含了所有网卡的IP地址的一个数组。

 代码如下 复制代码

- (NSArray *)getIpAddresses {
  int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
  if (sockfd < 0) return nil;
  NSMutableArray *ips = [NSMutableArray array];
 
  int BUFFERSIZE = 4096;
  struct ifconf ifc;
  char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr;
  struct ifreq *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 = (struct ifreq *)ptr;
      int len = sizeof(struct sockaddr);
      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 = [NSString stringWithFormat:@"%s", inet_ntoa(((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr)];
      [ips addObject:ip];
    }
  }
  close(sockfd);
  return ips;
}

文件头部需要加上这些import

 代码如下 复制代码

#import <sys/socket.h>
#import <sys/sockio.h>
#import <sys/ioctl.h>
#import <net/if.h>
#import <arpa/inet.h>

第二种方法是可以获取公网ip

 代码如下 复制代码

- (void)getCurrentIP
{
 NSURL *url = [NSURL URLWithString:@"http://automation.whatismyip.com/n09230945.asp"];
 __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
 [request setCompletionBlock:^{
  NSString *responseString = [request responseString];
  if (responseString) {
   
   NSString *ip = [NSString stringWithFormat:@"%@", responseString];
   
   NSLog(@"responseString = %@", ip);
  };
  
 }];
 
 [request setFailedBlock:^{
 }];
}

用到了ASIHTTPRequest这个网络开源库。

时间: 2024-10-26 19:29:21

苹果ios下获取设备的IP地址几种方法的相关文章

python在Windows8下获取本机ip地址的方法_python

本文实例讲述了python在Windows8下获取本机ip地址的方法.分享给大家供大家参考.具体实现方法如下: import socket hostname = socket.gethostname() IPinfo = socket.gethostbyname_ex(hostname) LocalIP = IPinfo[2][2] print LocalIP 希望本文所述对大家的Python程序设计有所帮助. 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内

iOS获取设备唯一标识的8种方法_IOS

8种iOS获取设备唯一标识的方法,希望对大家有用. UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可以改变设备的 UDID),移动网络可以利用 UDID 来识别移动设备. 许多开发者把 UDID 跟用户的真实姓名.密码.住址.其它数据关联起来,网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据,同时大部分应用确实在频繁传输 UDID 和私人信息. 为了避免集体诉讼,苹果最终决

linux下使用perl获取本机ip的几种方法介绍_linux shell

在使用 Gearman 做分布式处理时,各机需要注册一个独立的 job 作为信息反馈,为求方便,Gearman::Worker 脚本 register_function 代码又要通用,于是想到了使用各自的 ip 地址作为 job 命名. 那么怎么在 worker 脚本里获取本机 ip 作为 func 呢? 第一种办法,最简单的,调用 shell: 复制代码 代码如下: $ip = `ifconfig eth0|grep -oE '([0-9]{1,3}\.?){4}'|head -n 1`; 注

获取客户端ip地址二种方法(js,jquery)

利用jquery获取用户ip信息 $.getjson("http://jsonip.apps教程pot.com?callback=?",function(data){ alert( "你的ip:" + data.ip); }); 利用js获取用户ip地址信息 <html>        <head>    <meta http-equiv="content-type" content="text/html;

Android 获取设备屏幕大小的几种方法总结

1.通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); System.out.println("heigth : " + dm.heightPixels); System.out.println("width : " + dm.widthPixels); 2.通过Resources获取 Di

php获取Chianz.com IP地址与地区方法

一个IP获取的结果不是很完善,究其原因是因为ip138的IP解析应对国外的地址时不是很详细,所以又重新写了个用Chianz.com的代码. <!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8" /> <meta name="author" content="&

php获取本机mac地址三种方法

 代码如下 复制代码 class getmacaddr {         var $return_array = array(); // 返回带有mac地址的字串数组         var $mac_addr;                 function getmacaddr($os_type)         {                 switch ( strtolower($os_type) )                 {                     

python Flask获取用户的IP地址的代码

python Flask框架下获取用户的IP地址的范例代码,下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最基本的Flask使用方法. from flask import Flask, render_template, request # Initialize the Flask application app = Flask(__name__) # Default route, print user's IP @app.route('/') d

Delphi 7中快速获取本机IP地址

朋友们在用Delphi编程序的时候,常常碰到需要在程序中获取自己的IP地址的情况.在以往的版本中,可以通过编写一段代码或函数实现这一功能.但有了Delphi 7,这个工作可以更简化了.利用控件只需一句代码,就可以非常方便地实现这一功能. 新建一Project1,在form1中添加控件statusbar1(Win32页)和控件IdIPWatch1(Indy Misc页).接着设置好控件属性:在statusbar1的panels中添加0-TStatusPanel和1-TStatusPanel两项:I