日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

获得手机的ip

發(fā)布時間:2023/12/9 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获得手机的ip 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文轉(zhuǎn)載至 http://blog.csdn.net/showhilllee/article/details/8746114? iosip手機

?

貌似ASI里獲取ip地址的鏈接不可以了。也曾試過whatismyip,在其網(wǎng)站上的截圖獲取的ip是正確的,單不知道為什么在我這里卻是錯誤的。所以,在這里分享一下獲得手機ip的方法。代碼最初源自老外,通過系統(tǒng)提供的api獲取的,這里我就直接貼代碼了:

在創(chuàng)建的獲得ip類的頭文件里:

?

?

?

[java]?view plaincopyprint?
  • #define?MAXADDRS????32??
  • ??
  • extern?char?*if_names[MAXADDRS];??
  • extern?char?*ip_names[MAXADDRS];??
  • extern?char?*hw_addrs[MAXADDRS];??
  • extern?unsigned?long?ip_addrs[MAXADDRS];??
  • ??
  • //?Function?prototypes??
  • ??
  • void?InitAddresses();??
  • void?FreeAddresses();??
  • void?GetIPAddresses();??
  • void?GetHWAddresses();??


  • ?

    實現(xiàn)文件里:

    先導(dǎo)入文件

    ?

    ?

    [java]?view plaincopyprint?
  • #include?<stdio.h>??
  • #include?<stdlib.h>??
  • #include?<string.h>??
  • #include?<unistd.h>??
  • #include?<sys/ioctl.h>??
  • #include?<sys/types.h>??
  • #include?<sys/socket.h>??
  • #include?<netinet/in.h>??
  • #include?<netdb.h>??
  • #include?<arpa/inet.h>??
  • #include?<sys/sockio.h>??
  • #include?<net/if.h>??
  • #include?<errno.h>??
  • #include?<net/if_dl.h>??

  • 具體實現(xiàn)的代碼

    ?

    ?

    ?

    [java]?view plaincopyprint?
  • #define????min(a,b)????((a)?<?(b)???(a)?:?(b))??
  • #define????max(a,b)????((a)?>?(b)???(a)?:?(b))??
  • ??
  • #define?BUFFERSIZE????4000??
  • ??
  • char?*if_names[MAXADDRS];??
  • char?*ip_names[MAXADDRS];??
  • char?*hw_addrs[MAXADDRS];??
  • unsigned?long?ip_addrs[MAXADDRS];??
  • ??
  • static?int???nextAddr?=?0;??
  • ??
  • void?InitAddresses()??
  • {??
  • ????int?i;??
  • ????for?(i=0;?i<MAXADDRS;?++i)??
  • ????{??
  • ????????if_names[i]?=?ip_names[i]?=?hw_addrs[i]?=?NULL;??
  • ????????ip_addrs[i]?=?0;??
  • ????}??
  • }??
  • ??
  • void?FreeAddresses()??
  • {??
  • ????int?i;??
  • ????for?(i=0;?i<MAXADDRS;?++i)??
  • ????{??
  • ????????if?(if_names[i]?!=?0)?free(if_names[i]);??
  • ????????if?(ip_names[i]?!=?0)?free(ip_names[i]);??
  • ????????if?(hw_addrs[i]?!=?0)?free(hw_addrs[i]);??
  • ????????ip_addrs[i]?=?0;??
  • ????}??
  • ????InitAddresses();??
  • }??
  • ??
  • void?GetIPAddresses()??
  • {??
  • ????int?????????????????i,?len,?flags;??
  • ????char????????????????buffer[BUFFERSIZE],?*ptr,?lastname[IFNAMSIZ],?*cptr;??
  • ????struct?ifconf???????ifc;??
  • ????struct?ifreq????????*ifr,?ifrcopy;??
  • ????struct?sockaddr_in????*sin;??
  • ??????
  • ????char?temp[80];??
  • ??????
  • ????int?sockfd;??
  • ??????
  • ????for?(i=0;?i<MAXADDRS;?++i)??
  • ????{??
  • ????????if_names[i]?=?ip_names[i]?=?NULL;??
  • ????????ip_addrs[i]?=?0;??
  • ????}??
  • ??????
  • ????sockfd?=?socket(AF_INET,?SOCK_DGRAM,?0);??
  • ????if?(sockfd?<?0)??
  • ????{??
  • ????????perror("socket?failed");??
  • ????????return;??
  • ????}??
  • ??????
  • ????ifc.ifc_len?=?BUFFERSIZE;??
  • ????ifc.ifc_buf?=?buffer;??
  • ??????
  • ????if?(ioctl(sockfd,?SIOCGIFCONF,?&ifc)?<?0)??
  • ????{??
  • ????????perror("ioctl?error");??
  • ????????return;??
  • ????}??
  • ??????
  • ????lastname[0]?=?0;??
  • ??????
  • ????for?(ptr?=?buffer;?ptr?<?buffer?+?ifc.ifc_len;?)??
  • ????{??
  • ????????ifr?=?(struct?ifreq?*)ptr;??
  • ????????len?=?max(sizeof(struct?sockaddr),?ifr->ifr_addr.sa_len);??
  • ????????ptr?+=?sizeof(ifr->ifr_name)?+?len;????//?for?next?one?in?buffer??
  • ??????????
  • ????????if?(ifr->ifr_addr.sa_family?!=?AF_INET)??
  • ????????{??
  • ????????????continue;????//?ignore?if?not?desired?address?family??
  • ????????}??
  • ??????????
  • ????????if?((cptr?=?(char?*)strchr(ifr->ifr_name,?':'))?!=?NULL)??
  • ????????{??
  • ????????????*cptr?=?0;????????//?replace?colon?will?null??
  • ????????}??
  • ??????????
  • ????????if?(strncmp(lastname,?ifr->ifr_name,?IFNAMSIZ)?==?0)??
  • ????????{??
  • ????????????continue;????/*?already?processed?this?interface?*/??
  • ????????}??
  • ??????????
  • ????????memcpy(lastname,?ifr->ifr_name,?IFNAMSIZ);??
  • ??????????
  • ????????ifrcopy?=?*ifr;??
  • ????????ioctl(sockfd,?SIOCGIFFLAGS,?&ifrcopy);??
  • ????????flags?=?ifrcopy.ifr_flags;??
  • ????????if?((flags?&?IFF_UP)?==?0)??
  • ????????{??
  • ????????????continue;????//?ignore?if?interface?not?up??
  • ????????}??
  • ??????????
  • ????????if_names[nextAddr]?=?(char?*)malloc(strlen(ifr->ifr_name)+1);??
  • ????????if?(if_names[nextAddr]?==?NULL)??
  • ????????{??
  • ????????????return;??
  • ????????}??
  • ????????strcpy(if_names[nextAddr],?ifr->ifr_name);??
  • ??????????
  • ????????sin?=?(struct?sockaddr_in?*)&ifr->ifr_addr;??
  • ????????strcpy(temp,?inet_ntoa(sin->sin_addr));??
  • ??????????
  • ????????ip_names[nextAddr]?=?(char?*)malloc(strlen(temp)+1);??
  • ????????if?(ip_names[nextAddr]?==?NULL)??
  • ????????{??
  • ????????????return;??
  • ????????}??
  • ????????strcpy(ip_names[nextAddr],?temp);??
  • ??????????
  • ????????ip_addrs[nextAddr]?=?sin->sin_addr.s_addr;??
  • ??????????
  • ????????++nextAddr;??
  • ????}??
  • ??????
  • ????close(sockfd);??
  • }??
  • ??
  • void?GetHWAddresses()??
  • {??
  • ????struct?ifconf?ifc;??
  • ????struct?ifreq?*ifr;??
  • ????int?i,?sockfd;??
  • ????char?buffer[BUFFERSIZE],?*cp,?*cplim;??
  • ????char?temp[80];??
  • ??????
  • ????for?(i=0;?i<MAXADDRS;?++i)??
  • ????{??
  • ????????hw_addrs[i]?=?NULL;??
  • ????}??
  • ??????
  • ????sockfd?=?socket(AF_INET,?SOCK_DGRAM,?0);??
  • ????if?(sockfd?<?0)??
  • ????{??
  • ????????perror("socket?failed");??
  • ????????return;??
  • ????}??
  • ??????
  • ????ifc.ifc_len?=?BUFFERSIZE;??
  • ????ifc.ifc_buf?=?buffer;??
  • ??????
  • ????if?(ioctl(sockfd,?SIOCGIFCONF,?(char?*)&ifc)?<?0)??
  • ????{??
  • ????????perror("ioctl?error");??
  • ????????close(sockfd);??
  • ????????return;??
  • ????}??
  • ??????
  • ????ifr?=?ifc.ifc_req;??
  • ??????
  • ????cplim?=?buffer?+?ifc.ifc_len;??
  • ??????
  • ????for?(cp=buffer;?cp?<?cplim;?)??
  • ????{??
  • ????????ifr?=?(struct?ifreq?*)cp;??
  • ????????if?(ifr->ifr_addr.sa_family?==?AF_LINK)??
  • ????????{??
  • ????????????struct?sockaddr_dl?*sdl?=?(struct?sockaddr_dl?*)&ifr->ifr_addr;??
  • ????????????int?a,b,c,d,e,f;??
  • ????????????int?i;??
  • ??????????????
  • ????????????strcpy(temp,?(char?*)ether_ntoa(LLADDR(sdl)));??
  • ????????????sscanf(temp,?"%x:%x:%x:%x:%x:%x",?&a,?&b,?&c,?&d,?&e,?&f);??
  • ????????????sprintf(temp,?"%02X:%02X:%02X:%02X:%02X:%02X",a,b,c,d,e,f);??
  • ??????????????
  • ????????????for?(i=0;?i<MAXADDRS;?++i)??
  • ????????????{??
  • ????????????????if?((if_names[i]?!=?NULL)?&&?(strcmp(ifr->ifr_name,if_names[i])?==?0))??
  • ????????????????{??
  • ????????????????????if?(hw_addrs[i]?==?NULL)??
  • ????????????????????{??
  • ????????????????????????hw_addrs[i]?=?(char?*)malloc(strlen(temp)+1);??
  • ????????????????????????strcpy(hw_addrs[i],?temp);??
  • ????????????????????????break;??
  • ????????????????????}??
  • ????????????????}??
  • ????????????}??
  • ????????}??
  • ????????cp?+=?sizeof(ifr->ifr_name)?+?max(sizeof(ifr->ifr_addr),?ifr->ifr_addr.sa_len);??
  • ????}??
  • ??????
  • ????close(sockfd);??
  • }??


  • ?

    然后就是調(diào)用了,首先在我們的類里面導(dǎo)入上面那個類,之后在實現(xiàn)文件里寫函數(shù)

    ?

    [java]?view plaincopyprint?
  • -?(NSString?*)deviceIPAdress?{??
  • ????InitAddresses();??
  • ????GetIPAddresses();??
  • ????GetHWAddresses();??
  • ????return?[NSString?stringWithFormat:@"%s",?ip_names[1]];??
  • }??


  • ?

    然后在我們需要獲得ip的地方寫上

    ?

    [java]?view plaincopyprint?
  • NSString*?myip?=?[self?deviceIPAdress];??

  • 這里的myip就是我們需要的ip地址了

    ?

    ?

    手機截圖

    ?

    程序打印截圖

    總結(jié)

    以上是生活随笔為你收集整理的获得手机的ip的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。