65.9K
CodeProject 正在变化。 阅读更多。
Home

地理位置 WiFi 扫描器和定位器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (9投票s)

2015年4月2日

CPOL

2分钟阅读

viewsIcon

35901

downloadIcon

1544

使用 C# 和 VS2010 编写,作为一个类库,供您在自己的项目中调用。

引言

该项目扫描周围的 WiFi 网络,以检索名称、速度和 MAC 地址,然后可以将这些信息用于向 Google 服务器发送地理位置请求。它使用 C# 在 VS2010 中编写,生成一个类库。

提供了一个服务,每十秒左右轮询新的 WiFi 连接,并将这些连接以集合的形式返回,您可以根据需要使用或通过调用 Save(XMLFileName); 将其保存为 XML 表格,以便其他程序使用。

背景

我担心的是,当附近有人发出地理位置请求时,Google 会上传什么信息,以及我的数据是如何被使用的。此外,我还想将地理位置功能集成到我正在开发的浏览器中。

Using the Code

包含项目的完整源代码,以及编译为 DLL 的输出类库。所有对库的调用都使用 static 方法,如下所示,以使代码易于使用。示例代码位于文件 Sample.cs 中。

完全感谢 NativeWifi,他们提供了一些项目中使用的开源 Windows API 调用。

//
WifiScanner.WifiConnection.Start(10000);//Poll wifi connections every ten seconds
Thread.Sleep(30000);                    //Wait for three polls to complete
WifiScanner.WifiConnection.Stop();      //stop polling for new connections
string Json=WifiScanner.WifiConnection.GetGeoLocation(); //Ask Google for the json string
WifiScanner.WifiConnection.Clear();     //Clear any internal data
//

由于它使用加密的 SSL 数据包,因此很难从浏览器查看发送到 Google 的请求,但 Firefox 中的一个小技巧是在 URL 中输入“About:config”,然后搜索“Google”,然后将 Geo.Wifi.Url 值从 HTTPS 更改为 HTTP,然后从使用允许您检查外发 HTTP 请求标头和 XML post 数据的代理服务器的浏览器发出地理位置请求。

//
POST /geolocation/v1/geolocate?key=abcdFakeKey HTTP/1.1
Host: www.xgoogleapis.com
Connection: keep-alive
Content-Length: 662
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/json
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Accept-Encoding: gzip, deflate

{"wifiAccessPoints":[{"age":1,"macAddress":"11-1d-aa-a6-13-38",
"signalStrength":-43},{"age":1,"macAddress":"11-1d-aa-a6-13-33",
"signalStrength":-44},{"age":1,"macAddress":"3a-b1-db-2c-53-a5",
"signalStrength":-56},{"age":1,"macAddress":"16-2d-26-35-d5-a8",
"signalStrength":-61},{"age":1,"macAddress":"11-21-14-d6-ee-82",
"signalStrength":-66},{"age":1,"macAddress":"16-21-14-d6-ee-82",
"signalStrength":-66},{"age":1,"macAddress":"e4-f4-c6-86-26-b8",
"signalStrength":-66},{"age":1,"macAddress":"1a-21-14-d6-ee-82",
"signalStrength":-68},{"age":1,"macAddress":"e4-f4-c6-86-26-b3",
"signalStrength":-68},{"age":1,"macAddress":"84-1b-5e-bb-2a-b8",
"signalStrength":-86}]}
//

这是我在 CodeProject 上发布的第一个项目,如果您想要一个完全可用的远程桌面,或者想学习如何在不打开大量端口或运行所有正确的 Windows 服务的情况下让 Windows 中的“Play to” 正常工作,请继续关注。

尽情享用!

© . All rights reserved.