美文网首页
2022-06-22 最新ios WiFi打卡

2022-06-22 最新ios WiFi打卡

作者: KyleLou | 来源:发表于2022-06-22 11:15 被阅读0次

    了解WiFi

    SSID

    SSID就是一个局域网的名称,只有设置为名称相同SSID的值的电脑才能互相通信。
    简单点就是你给自己的无线网络所取的名字。

    BSSID

    可以理解为无线路由器的MAC地址,通过查看移动设备连接WiFi的MAC地址即可知道连接的是哪一个路由。

    MAC

    地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡(Network lnterface Card)的EPROM(一种闪存芯片,通常可以通过程序擦写)。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的。</p>
    <p>MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前6位16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后6位16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界是惟一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性。

    开启 Wi-Fi 考勤(基于 MAC 地址),考勤人员连接上公司的 Wi-Fi(必须匹配 Wi-Fi 路由器的 MAC 地址),进行打卡。
    注:判断考勤人员是否连接上公司 Wi-Fi,不是看 Wi-Fi 名称,而必须是 Wi-Fi 路由器的 MAC 地址和考勤人员连接上网的 MAC 地址相匹配。请务必根据下文录入完整的 MAC 地址。

    image.png

    注:除了咨询 IT 外,还可以如何获取 Wi-Fi 名称和 MAC 地址?

    找一部已连接上办公区 Wi-Fi 的手机,进入打卡应用,点击设置,查看我的设备信息。ssid 信息即 Wi-Fi 名称,bssid 信息即 MAC 地址。

    /** 获取WiFi的名称 */

    + (NSString *)fetchWiFiName {
        NSString *WiFiName = nil;
        NSDictionary *info = [WiFiInfoTool fetchSSIDInfo];
        if (info && [info count]) {
            // 这里其实对应的有三个key:kCNNetworkInfoKeySSID、kCNNetworkInfoKeyBSSID、kCNNetworkInfoKeySSIDData,
            // 不过它们都是CFStringRef类型的
            WiFiName = [info objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID];
            //            WiFiName = [info objectForKey:@"SSID"];
        }
        return WiFiName;
    }
    
    

    /** 获取网关 */

    + (NSString *)getGatewayIpForCurrentWiFi{
        NSString *address = @"error";
        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) {
                /*/
                 int i=255;
                 while((i--)>0)
                 //*/
                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 //ifa_addr
                        //ifa->ifa_dstaddr is the broadcast address, which explains the "255's"
                        //                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)];
                        address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                        
                        //routerIP----192.168.1.255 广播地址
                        NSLog(@"broadcast address--%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)]);
                        //--192.168.1.106 本机地址
                        NSLog(@"local device ip--%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)]);
                        //--255.255.255.0 子网掩码地址
                        NSLog(@"netmask--%@",[NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)]);
                        //--en0 端口地址
                        NSLog(@"interface--%@",[NSString stringWithUTF8String:temp_addr->ifa_name]);
                    }
                }
                temp_addr = temp_addr->ifa_next;
            }
        }
        // Free memory
        freeifaddrs(interfaces);
        in_addr_t i = inet_addr([address cStringUsingEncoding:NSUTF8StringEncoding]);
        in_addr_t* x = &i;
        unsigned char *s = getdefaultgateway(x);
        NSString *ip=[NSString stringWithFormat:@"%d.%d.%d.%d",s[0],s[1],s[2],s[3]];
        free(s);
        return ip;
    }
    
    

    /** 获取本机在WiFi环境下的IP地址 */

    + (NSString *)getLocalIPAddressForCurrentWiFi{
        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_addr)->sin_addr)];
                        return address;
                    }
                }
                temp_addr = temp_addr->ifa_next;
            }
            freeifaddrs(interfaces);
        }
        return nil;
    }
    
    /** 广播地址、子网掩码、端口等,组装成一个字典。 */
    + (NSMutableDictionary *)getLocalInfoForCurrentWiFi {
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        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"]) {
                        //----192.168.1.255 广播地址
                        NSString *broadcast = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)];
                        if (broadcast) {
                            [dict setObject:broadcast forKey:@"broadcast"];
                        }
                        NSLog(@"broadcast address--%@",broadcast);
                        //--192.168.1.106 本机地址
                        NSString *localIp = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                        if (localIp) {
                            [dict setObject:localIp forKey:@"localIp"];
                        }
                        NSLog(@"local device ip--%@",localIp);
                        //--255.255.255.0 子网掩码地址
                        NSString *netmask = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)];
                        if (netmask) {
                            [dict setObject:netmask forKey:@"netmask"];
                        }
                        NSLog(@"netmask--%@",netmask);
                        //--en0 端口地址
                        NSString *interface = [NSString stringWithUTF8String:temp_addr->ifa_name];
                        if (interface) {
                            [dict setObject:interface forKey:@"interface"];
                        }
                        NSLog(@"interface--%@",interface);
                        return dict;
                    }
                }
                temp_addr = temp_addr->ifa_next;
            }
        }
        // Free memory
        freeifaddrs(interfaces);
        return dict;
    }
    

    相关文章

      网友评论

          本文标题:2022-06-22 最新ios WiFi打卡

          本文链接:https://www.haomeiwen.com/subject/caayvrtx.html