• iOS获取WIFI的IP、子网掩码,以及域名转IP


    获取WIFI需要的头文件:

    #import "GetCurrentIP.h"

    #import <ifaddrs.h>

    #import <arpa/inet.h>

    #import <SystemConfiguration/CaptiveNetwork.h>

    #include <netdb.h>

    #include <net/if.h>

    #import <dlfcn.h>

    #include <sys/socket.h>

    #include <sys/sysctl.h>

    获取所连wifi的IP的方法:

    #pragma mark - 获取用户当前的IP地址

    + (nullable NSString*)getCurrentLocalIP

    {

        NSString *address = nil;

        struct ifaddrs *interfaces = NULL;

        struct ifaddrs *temp_addr = NULL;

        int success = 0;

        // retrieve the current interfaces - returns 0 on success

        success = getifaddrs(&interfaces);

        if (success == 0) {

            // Loop through linked list of interfaces

            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;

            }

        }

        // Free memory

        freeifaddrs(interfaces);

        return address;

        }

     获取所连WIFI的详细信息:

     + (nullable NSString*)getCurrentWifiMessage {

            NSString *address = nil;

            struct ifaddrs *interfaces = NULL;

            struct ifaddrs *temp_addr = NULL;

            int success = 0;

            // retrieve the current interfaces - returns 0 on success

            success = getifaddrs(&interfaces);

            if (success == 0)

            {

                // Loop through linked list of interfaces

                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"])

                        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)];

                        //                    NSLog(@"子网掩码:%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)]);

                        //                NSLog(@"本地IP:%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]);

                        //                NSLog(@"广播地址:%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)]);

                    }

                    

                    temp_addr = temp_addr->ifa_next;

                }

            }

            // Free memory

            freeifaddrs(interfaces);

            return address;

    }

     域名转换成IP:

    #pragma mark - 域名转成IP的方法

    + (NSString *)queryIpWithDomain:(NSString *)domain

    {

        struct hostent *hs;

        struct sockaddr_in server;

        if ((hs = gethostbyname([domain UTF8String])) != NULL)

        {

            server.sin_addr = *((struct in_addr*)hs->h_addr_list[0]);

            return [NSString stringWithUTF8String:inet_ntoa(server.sin_addr)];

        }

        return @"1";

    }

  • 相关阅读:
    爬虫必备—性能相关(异步非阻塞)
    JPA自定义查询@Query分页
    iiview Select 选择框打勾选中的内容label和展示的不一致
    ivew Table 固定列设置后,底部拖拽的横轴被覆盖拉不动
    vue消息提示Message
    LeafLet之气泡框隐藏"x"图标
    vue 之 折线图挤压
    iView之清空选择框
    iview之select选择框选中内容后有空格的问题
    iview组件select之默认展示label,并传空value做方法入参
  • 原文地址:https://www.cnblogs.com/muzichenyu/p/7091625.html
Copyright © 2020-2023  润新知