精华内容
下载资源
问答
  • Android获取WIFI的BSSID遇到的坑(已解决) 嗯,第一次写博客,有点紧张,咳咳,清清肺。OK,迈入正题,前几天公司有个小的需求,获取到WIFI的MAC。我耗时足足10分钟,才写完的。当时还感觉没什么东西,重点来了。我...

    Android获取WIFI的BSSID遇到的坑(已解决)


    嗯,第一次写博客,有点紧张,咳咳,清清肺。OK,迈入正题,前几天公司有个小的需求,获取到WIFI的MAC。我耗时足足10分钟,才写完的。当时还感觉没什么东西,重点来了。我手机是Android8.1的各种测试获取到的都是02:00:00:00:00:00,当时搞了一天,有点崩溃。后来查资料说是谷歌为了数据保护给加密了,我****。然后各种百度,网上的都是获取手机的MAC。无奈之下一根烟下去,有点上头,想到了重点。上代码。

    Android8.1以下
    在这里插入图片描述

    Android8.1以上
    在这里插入图片描述
    最后就是权限了
    位置权限
    在这里插入图片描述
    WIFI权限
    在这里插入图片描述
    OK,不用谢我,我是雷锋。

    展开全文
  • 获取WIFI的BSSID MAC

    千次阅读 2015-08-03 16:12:41
    wifi打印信息: {  BSSID = "84:82:f4:5:53:f3";  SSID = "office_internet1";  SSIDDATA = ; } 记得导入 #import 否则报错 Implicit declaration of function CNCopySupportedInterfaces is...

    wifi打印的信息: {

        BSSID = "84:82:f4:5:53:f3";

        SSID = "office_internet1";

        SSIDDATA = <6f666669 63655f69 6e746572 6e657431>;

    }


    记得导入

    #import <SystemConfiguration/CaptiveNetwork.h>


    否则报错
    Implicit declaration of function CNCopySupportedInterfaces is invalid in C99


    #pragma mark WIFI MAC

    -(NSString*) wifiMACAddress

    {

        CFArrayRef wifiInterfaces = CNCopySupportedInterfaces();

        if(!wifiInterfaces){

            NSLog(@"fale.....");

        }

        NSArray*interfaces = (__bridge NSArray*)wifiInterfaces;

        NSString* dic = nil;

        for (NSString*interfaceName in interfaces) {

            CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName));

            if (dictRef) {

                NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef;

                NSLog(@"network info -> %@", networkInfo);

                dic = [networkInfo objectForKey:@"BSSID"];

                NSLog(@"%@", dic);

            }

        }

        CFRelease(wifiInterfaces);

        return dic;

    }


    展开全文
  • 其原理是通过带有gps定位功能的设备接入wifi后,讲wifi的bssid信息连同gps定位结果同时上传到服务器,当有其他设备再次连接这个wifi时,就能大致的推断出他的位置。 在win8.1后已经提供接口可直接获取设备的经定位...

    wifi定位:顾名思义就是利用wifi来进行定位的功能。其原理是通过带有gps定位功能的设备接入wifi后,讲wifi的bssid信息连同gps定位结果同时上传到服务器,当有其他设备再次连接这个wifi时,就能大致的推断出他的位置。

    在win8.1后已经提供接口可直接获取设备的经定位信息,当然xp、win7呢?显然不支持。由此我们就想到有没有办法让他们也能够定位呢?答案是肯定的!

    一、首先你的计算机要支持wifi,不然就扯淡了。看看如何获取wifi的bssid吧。

    #include <wlanapi.h>
    
    typedef std::string AString;
    typedef std::vector<AString> AStringVector;
    
    // Need to link with Wlanapi.lib and Ole32.lib
    #pragma comment(lib, "wlanapi.lib")
    #pragma comment(lib, "ole32.lib")
    #pragma comment(lib,"netapi32")
    
    AStringVector GetBSSIDs()
    {
    	AStringVector vecBSSIDs;
    
    	// Declare and initialize variables.
    
    	HANDLE hClient = NULL;
    	DWORD dwMaxClient = 2;      //    
    	DWORD dwCurVersion = 0;
    	DWORD dwResult = 0;
    	DWORD dwRetVal = 0;
    	int iRet = 0;
    
    	WCHAR GuidString[39] = { 0 };
    
    	unsigned int i, j, k;
    
    	/* variables used for WlanEnumInterfaces  */
    
    	PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
    	PWLAN_INTERFACE_INFO pIfInfo = NULL;
    
    	PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;
    	PWLAN_AVAILABLE_NETWORK pBssEntry = NULL;
    
    	int iRSSI = 0;
    
    	dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
    	if (dwResult == ERROR_SUCCESS)
    	{
    		dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
    		if (dwResult != ERROR_SUCCESS) 
    		{
    			LOG("WlanEnumInterfaces failed with error: %u\n", dwResult);
    			// You can use FormatMessage here to find out why the function failed
    		}
    		else 
    		{
    			for (i = 0; i < (int)pIfList->dwNumberOfItems; i++) {
    				pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[i];
    
    				dwResult = WlanGetAvailableNetworkList(hClient,
    					&pIfInfo->InterfaceGuid, 0, NULL, &pBssList);
    
    				if (dwResult != ERROR_SUCCESS) {
    					LOG("WlanGetAvailableNetworkList failed with error: %u\n", dwResult);
    					dwRetVal = 1;
    					// You can use FormatMessage to find out why the function failed
    				}
    				else 
    				{
    					for (j = 0; j < pBssList->dwNumberOfItems; j++)
    					{
    						pBssEntry = (WLAN_AVAILABLE_NETWORK *)& pBssList->Network[j];
    
    						PWLAN_BSS_LIST ppWlanBssList;
    
    						DWORD dwResult2 = WlanGetNetworkBssList(hClient, &pIfInfo->InterfaceGuid,
    							&pBssEntry->dot11Ssid,
    							pBssEntry->dot11BssType,
    							pBssEntry->bSecurityEnabled,
    							NULL,
    							&ppWlanBssList);
    
    						if (dwResult2 == ERROR_SUCCESS)
    						{
    							for (int z = 0; z < ppWlanBssList->dwNumberOfItems; z++)
    							{
    								WLAN_BSS_ENTRY bssEntry = ppWlanBssList->wlanBssEntries[z];
    
    								AString bssid = Printf("%02X:%02X:%02X:%02X:%02X:%02X",
    									bssEntry.dot11Bssid[0],
    									bssEntry.dot11Bssid[1],
    									bssEntry.dot11Bssid[2],
    									bssEntry.dot11Bssid[3],
    									bssEntry.dot11Bssid[4],
    									bssEntry.dot11Bssid[5]);
    
    								vecBSSIDs.push_back(bssid);
    							}
    						}
    					}
    				}
    			}
    
    		}
    	}
    	else
    	{
    		LOG("WlanOpenHandle failed with error: %u\n", dwResult);
    		// You can use FormatMessage here to find out why the function failed
    	}
    
    	if (pBssList != NULL) {
    		WlanFreeMemory(pBssList);
    		pBssList = NULL;
    	}
    
    	if (pIfList != NULL) {
    		WlanFreeMemory(pIfList);
    		pIfList = NULL;
    	}
    
    	return vecBSSIDs;
    }

    二、看看如何使用这些bssid吧。

    我们以百度的wifi定位接口为例,当然谷歌、新浪等等都有类似的接口,甚至还有收费的。

    #include <json/json.h>
    #include <curl/curl.h>
    
    AString url = "http://apis.baidu.com/lbs_repository/wifi/query?coord=wgs84&mac=";
    
    
    size_t write_data(void* buffer, size_t size, size_t nmemb, void *stream)
    {
    	AString *fptr = (AString*)stream;
    	fptr->append((char*)buffer);
    
    	return size*nmemb;
    }
    
    void getGeoInfo(const AString &url, const AString &bssid,const AString &appkey)
    {
    	AString postUrl = url + bssid;
    
    
    	CURL *curl;
    	CURLcode res;
    	AString *strRet = new AString;
    
    	struct curl_slist *headers = NULL; /* init to NULL is important */
    	headers = curl_slist_append(headers, AString("apikey: "+ m_strAppKey).c_str());
    
    	curl = curl_easy_init();
    	curl_easy_setopt(curl, CURLOPT_URL, postUrl.c_str());
    	curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    
    	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    	curl_easy_setopt(curl, CURLOPT_WRITEDATA, strRet);
    	curl_easy_setopt(curl, CURLOPT_HEADER, 1);
    
    
    	res = curl_easy_perform(curl);
    
    	curl_easy_cleanup(curl);
    
    	if (res != CURLE_OK)
    	{
    		switch (res)
    		{
    		case CURLE_UNSUPPORTED_PROTOCOL:
    			fprintf(stderr, "不支持的协议,由URL的头部指定\n");
    		case CURLE_COULDNT_CONNECT:
    			fprintf(stderr, "不能连接到remote主机或者代理\n");
    		case CURLE_HTTP_RETURNED_ERROR:
    			fprintf(stderr, "http返回错误\n");
    		case CURLE_READ_ERROR:
    			fprintf(stderr, "读本地文件错误\n");
    		default:
    			fprintf(stderr, "返回值:%d\n", res);
    		}
    	}
    
    	AString strResult = *strRet;
    
    	delete strRet;
    
    	size_t end_index = strResult.find("\r\n\r\n");	//所以也不需要计算偏移来提高搜索速度
    	if (end_index != std::string::npos)
    	{
    		size_t length = strResult.length();
    		AString strBody = strResult.substr(end_index + 4, length - end_index - 4);
    		AString strHeader = strResult.substr(0, end_index + 4);
    
    
    		//正常HTTP头中 第9-11位为HTTP状态码
    		size_t lenght = strHeader.length();
    
    		int _http_code = -1;
    		if (lenght >= 12)
    		{
    			std::string http_code = strHeader.substr(9, 3);
    			try
    			{
    				_http_code = atoi(http_code.c_str());
    			}
    			catch (...)
    			{
    				_http_code = -1;
    			}
    		}
    
    		if (_http_code == 200)
    		{
    			Json::Reader reader;
    			Json::Value root;
    			if (reader.parse(strBody, root))  // reader将Json字符串解析到root,root将包含Json里所有子元素  
    			{
    				UInt32 errcode = root["errcode"].asUInt();
    				UInt32 radius = atoi(root["radius"].asString().c_str());
    				double lat = atof(root["lat"].asString().c_str());
    				double lon = atof(root["lon"].asString().c_str());
    				AString address = root["address"].asString();
    
    				if (errcode == 0)
    				{
    					//定位成功
    				}
    			}
    		}
    	}
    }

    好了,到此为止基本上已经讲完了。wifi定位不能作为最终的结果,毕竟数据库可能不完整或者不实时,定位的结果存在偏差也是很正常的。我们一般还要采取其他方式进行混合定位,比如:基站+wifi+ip+gps等等。

    再次希望对需要的人有帮助,谢谢。



    展开全文
  • iphone ipad 获取wifi信息 BSSID SSID

    万次阅读 2013-09-05 15:20:08
    首先,app如果要上app store是没有办法获取wifi列表~  这些WIFI扫描软件使用了苹果私有函数apple80211.framework  尽管不能合法(指能通过App Store审核)的获取WIFI列表, 不过我们还是可以获取到当前Wifi...
    首先,app如果要上app store是没有办法获取wifi列表的~ 

    这些WIFI扫描软件使用了苹果的私有函数apple80211.framework 


    尽管不能合法(指能通过App Store的审核)的获取WIFI列表, 不过我们还是可以获取到当前Wifi连接的信息,比如SSID. BSSID
    SSID全称Service Set IDentifier, 即Wifi网络的公开名称. 

    BSSID 是指站点的 MAC 地址.

    苹果在IOS v4.1+版本上提供了公开的方法来获取该信息. 

    注意记得要在build phases中添加库SystemConfiguration.framework

    #import <SystemConfiguration/CaptiveNetwork.h>  
      
    - (id)fetchSSIDInfo  
    {  
        NSArray *ifs = (id)CNCopySupportedInterfaces();  
        NSLog(@"%s: Supported interfaces: %@", __func__, ifs);  
        id info = nil;  
        for (NSString *ifnam in ifs) {  
            info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);  
            NSLog(@"%s: %@ => %@", __func__, ifnam, info);  
            if (info && [info count]) {  
                break;  
            }  
            [info release];  
        }  
        [ifs release];  
        return [info autorelease];  
    } 


    ARC版本

    #import <SystemConfiguration/CaptiveNetwork.h>

    - (id)fetchSSIDInfo {  
         NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();  
         NSLog(@"Supported interfaces: %@", ifs);  
         id info = nil;  
         for (NSString *ifnam in ifs) {  
             info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);  
             NSLog(@"%@ => %@", ifnam, info);  //单个数据info[@"SSID"]; info[@"BSSID"];
             if (info && [info count]) { break; }  
         }  
         return info;  
    }

    输出结果

    2013-09-05 10:32:00.655 wifiTest[3534:707] -[wifiTestAppDelegate fetchSSIDInfo]: Supported interfaces: (  
        en0  
    )  
    2013-09-05 10:32:00.661 wifiTest [3534:707] -[wifiTestAppDelegate fetchSSIDInfo]: en0 => {  
        BSSID = "0:4:c3:a1:2b:22";  
        SSID = wifiname;  
        SSIDDATA = <01234567 76543210>;  
    }

    BSSID 正确格式是 00:04:c3:a1:2b:22 但是输出以后却是0:4:c3:a1:2b:22 少了头0,可用一下方法补0


    - (NSString *)standardFormateMAC:(NSString *)MAC {
        NSArray * subStr = [MAC componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@":-"]];
        NSMutableArray * subStr_M = [[NSMutableArray alloc] initWithCapacity:0];
        for (NSString * str in subStr) {
            if (1 == str.length) {
                NSString * tmpStr = [NSString stringWithFormat:@"0%@", str];
                [subStr_M addObject:tmpStr];
            } else {
                [subStr_M addObject:str];
            }
        }
        
        NSString * formateMAC = [subStr_M componentsJoinedByString:@":"];
        [subStr_M release];
        return [formateMAC uppercaseString];
    }
    


    展开全文
  • Windows Phone获取WiFi BSSID 原文:Windows Phone获取WiFi BSSID BSSID,一种特殊Ad-hoc LAN应用,也称为Basic Service Set (BSS),一群计算机设定相同BSS名称,即可自成一个group。每个BSS...
  • Windows查看WIFI的BSSID WIFI热点的BSSID其实就是WIFI的MAC地址,Windows查看WIFI MAC地址,只能通过命令行实现。 打开命令提示符cmd.exe,输入以下命令,回车,可以看到Windows系统能够发现的附近所有WIFI的BSSID和...
  • 注:2013年写的,仅供参考 为了增强用户隐私,Android 9 引入了若干行为变更,如限制...一上班就开始总结上礼拜写的wifi,先来说说wifi的属性 在Android的官方文档中定义了如下五种状态: WIFI_STATE_DISABLED ...
  • 通过WiFi的bssid,我们可以对目标机器进行一个大致的定位,并获得其他意料之外的信息。查看电脑能搜索到的所有WiFinetsh wlan show networks mode=bssid经过实际的测试,在电脑联网状态下只能获取当前的WiFi信息,...
  • 今天踩了个坑,可能也是自己看文档不够认真,产生了一点点SSID,BSSID的认知误差,当时百度查看了一篇文档,在文档中提取了统称SSID之类的字眼,在脑海中生成了错误的信息.../*** 获取当前连接WIFI的SSID*/public sta...
  • bssid是一个AP信号的唯一标示,一般通过wifi定位,就是检测设备把连接的AP信号的bssid和当前GPS位置上传到服务器,其他设备需要连接目标AP并上传GPS位置信息进行比较,如果一致就认为在范围内,就会允许签到、打卡等...
  • //获取当前WiFi名称 function checkWifiSignal() { var info = {ssid:'',bssid:''}; var Context = plus.android.importClass("android.content.Context"); var WifiManager = plus.android....
  • 改编@ToonSuperLove答案,...public class WifiTest extends Activity {public void loadWifiAvailableList(EditText etWifiList) {WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERV...
  • Windows wlan 获取bssid 以及浅谈wifi定位

    千次阅读 2018-09-11 09:15:17
    bssid是一个AP信号的唯一标示,一般通过wifi定位,就是检测设备把连接的AP信号的bssid和当前GPS位置上传到服务器,其他设备需要连接目标AP并上传GPS位置信息进行比较,如果一致就认为在范围内,就会允许签到、打卡等...
  • 项目有个很重要的需求,就是获取手机的当前所连Wifi的mac地址,注意并非是手机设备的mac地址。方法也是网上找的。 组员大概都用手机测了一遍。测试发现,有一部分手机,除了要授予APP定位权限外,还需要用户手动...
  • 广播接收器类,确保在清单中提供权限ACCESS_WIFI_STATE和CHANGE_WIFI_STATE.public class WifiChecker extends BroadcastReceiver {private OnWifiResultArrived onWifiResultArrived = null;...
  • C++ 获取wifi列表与相关信息 缘由: 最近在写一个涉及到wifi的工具。之前找到的源码是linux下的,而且充斥着黑科技(底层了,用socket的混淆模式去抓包然后分析,看的头大),想找到一些写好的接口,在收集后知道有...
  • 今天踩了个坑,可能也是自己看文档不够认真,产生了一点点SSID,BSSID的认知误差,当时百度查看了一篇文档,在文档中提取了统称SSID之类的字眼,在脑海中生成了错误的信息既SSID内包含了... * 获取当前连接WIFI的S...
  • 获取WiFi的SSID

    2019-09-14 20:57:24
    SSID(Service Set Identifier),许多人认为可以将SSID写成ESSID,其实不然,SSID是个笼统概念,包含了ESSID和BSSID,用来区分不同网络,最多可以有32个字符,无线网卡设置了不同SSID就可以进入不同网络,...
  • 如果想要定位WIFI的位置,但IP地址发生了变化,又或是动态IP扰乱的你的操作计划,那就可以试试这个网站了,它提供了一项很难得的数据,根据BSSID(路由器MAC地址)反查路由器位置。这种功能我在其他地方都没怎么见过,...
  • Swift3.0: 获取Wifi SSID

    千次阅读 2016-09-23 16:30:19
    Swift3.0: 获取Wifi SSID使用SystemConfiguration Api 可以获取当前连接 Wifi SSID、BSSID信息,swift3.0写法如下:首先要导入SystemConfiguration.framework,然后导入头文件:import SystemConfiguration ...
  • wifi的mac地址其实是BSSID #if UNITY_IOS || UNITY_IPHONE [DllImport("__Internal")] private static extern string _GetBSSID(); #endif string mac = _GetBSSID(); // // MyIOSSDK.m // Unity-iPhone /
  • Android Studio获取wifi列表等信息

    千次阅读 2019-04-29 09:01:19
    BSSIDwifi的mac地址 level为wifi的信号强度 main_activity.java: package com.example.myapplication; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.supp...
  • 每一个 Wifi 路由器都会有一个 BSSID,很多人都管这个 BSSID 叫 MAC 地址(其实 BSSID 并不是 MAC 地址),BSSID 设定了一般就不会在变也不会重复,也就意味着是全球唯一...获取WiFi信息func getWifiInfo() -> (ssid:

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

获取wifi的bssid