Coder Social home page Coder Social logo

ecoapm / wifisurveyor Goto Github PK

View Code? Open in Web Editor NEW
41.0 3.0 9.0 848 KB

Visualize Wi-Fi signal strength over a geographic area

License: GNU General Public License v3.0

C# 30.47% HTML 0.39% TypeScript 52.31% Vue 15.36% JavaScript 0.67% Shell 0.22% CSS 0.58%
wifi wi-fi mapping wardriving surveyor webgl signalr signalr-core vue-js typescript

wifisurveyor's Introduction

Wi-Fi Surveyor

Latest Release Build Status

App App Coverage App Maintainability App Reliability App Security

Server Server Coverage Server Maintainability Server Reliability Server Security

Visualize Wi-Fi signal strength over a geographic area

Quick Start

  1. Download and extract the latest release for your operating system

  2. Extract the archive to your directory of choice

  3. Launch the executable for your OS:

    • WiFiSurveyor.exe on Windows
    • WiFiSurveyor on MacOS
    • sudo ./WiFiSurveyor on Linux (must be root)
  4. Wait for the app to appear in your browser

  5. Under "Background", select a floorplan or map image representing the area to survey

  6. Select your SSID from the "Access Point" dropdown menu

  7. Traverse the area to survey, clicking on corresponding map points that represent your location

  8. Once data has been collected, select other access points or change filters to display updated coverage

  9. Save your data to be loaded again later, or shared with other users

Access Point Filters

  • The default selection of both "Group by SSID" and "Combine 2.4 + 5GHz" will show one option per SSID

  • Selecting only "Group by SSID" will show one option for each frequency that an SSID receives

  • Unselecting both "Group by SSID" (which also disables "Combine 2.4 + 5GHz") will show every device for every SSID available, on both frequencies

Selecting a background

  • Supports all file types used for CSS background-image

  • The "Pixelate" option is good for floor plans with low resolutions (less than 1px/in²) so straight lines maintain hard edges

Saving/loading data

  • Saves all signal data as a JSON file

  • Loading this file again will restore all data points and signal info from the file

  • See limitation about browser window sizes below

Limitations

Contibutions are welcome for improving the following:

  • Linux uses the device named wlan0

  • Windows uses the "first" Wi-Fi adapter

  • Resizing the browser window will not scale readings with the background image: once you start taking readings, don't resize your window (rotating your device and rotating back should be OK)

Contributing

Requirements

  • .NET SDK 7
  • Node.JS with yarn

Building from source

  • Run dotnet run --project {Linux|Mac|Windows} -- dev (with sudo for Linux) from the repo root directory to start the back-end server
  • Run yarn dev from the repo root directory to start the front-end development server
  • Browse to http://localhost:3000
  • Back-end and front-end can be stopped and restarted independently during inner dev loop

Running tests

  • Run dotnet test from the repo root directory for back-end tests
  • Run yarn test from the repo root directory for front-end tests

wifisurveyor's People

Contributors

dependabot[bot] avatar stevedesmond-ca avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

wifisurveyor's Issues

Automate deployment

As a developer, I want to not need to manually package and deploy 3 different archives per release, so that I can do more important things with my life.

Acceptance criteria:

  • Pushing a tag will create a release for that tag
  • Release includes Windows (.zip), Linux (.tar.gz), and MacOS (.dmg) archives
  • Linux and MacOS archives have executable bit set

SNR mode (Signal to Noise Ratio)

As a surveyor of Wi-Fi, I want to know how strong my signal is compared to others around me, so that I can maximize my throughput.

Acceptance criteria:

  • new radio button / toggle for dBm / SNR
  • dBm is the current/existing mode
  • SNR is the selected signal's dBm minus the next strongest signal's dBm
  • can be calculated on the fly, rather than needing to be stored?
  • color gradient matches dBm mode
  • no other signals should be treated as the current min acceptable dBm

Cannot reload same file repeatedly in Chrome

Steps to reproduce

  1. start Wi-Fi Surveyor in Chrome
  2. create some data points and save a file
  3. clear data points and load that file
  4. clear data points again and load the same file

Expected behavior

  • data is reloaded, as happens in Firefox

Observed behavior

  • no discernible changes

Notes
I think it's holding onto the filename, seeing that it's not changing, and not triggering the expected event...easy fix might be to clear the file input on load

No signal on load file

I tried to save, quit and load (on Windows) and there is no signal on all reading point ?
Have i missed something ?
Regards

macOS support

As a Mac user, I want to use Wi-Fi Surveyor on my macOS device, so that I can survey my Wi-Fi coverage.

Acceptance criteria:

  • renameLinuxCommandService is renamed POSIXCommandService
  • create MacOSSignalReader similar to their Linux counterparts, but calling /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport -s
  • create MacOSSignalParser to parse output from Reader
  • update StartupFactory to inject appropriate objects for macOS

Help with MacOS support

Here's something just about any Mac user can do to help with this project, without needing to submit any new C#/.NET code!

Without a MacOS device on premises, we're reaching out to the community to be able to get data on how MacOS reports Wi-Fi signal information.

  1. open up a terminal window
  2. run /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s > airport-output.txt
  3. create a new PR adding airport-output.txt to the Server.Tests directory
  4. feel free to redact information such as SSID names or MAC addresses with xs, but please take care to maintain tabs, whitespace, and non-alphanumeric characters

We need a good sampling of data here for proper parsing and error handling, so multiple PRs will be accepted for this!

Launch browser on start

As a user, I want to automatically have the app "launch" when I run it, so that I don't need to open it in a browser myself.

Acceptance criteria:

  • when WiFiSurveyor starts, a new tab in the user's default browser is opened with the app's URL

MacOS 14.5: Could not parse signal data

Steps to reproduce

  1. login as admin
  2. run sudo ./WiFiSurveyor

Expected behavior
The wifi adapter should be detected and networks should appear in the application (as it was before)

Observed behavior
The application cannot detect the adapter and does not allow access to networks (this is the case now, resetting network settings does not help)

vladislavgatsenko@MacBook-Pro WiFiSurveyor.1.2.1.Mac % sudo ./WiFiSurveyor
warn: WiFiSurveyor[0]
      Could not parse signal data: For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://127.0.0.1:49424
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /Users/vladislavgatsenko/Downloads/WiFiSurveyor.1.2.1.Mac
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://127.0.0.1:49424/ - -
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[2]
      Sending file. Request path: '/index.html'. Physical path: '/Users/vladislavgatsenko/Downloads/WiFiSurveyor.1.2.1.Mac/wwwroot/_content/WiFiSurveyor.Core/index.html'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://127.0.0.1:49424/ - - - 200 - text/html 25.2854ms
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://127.0.0.1:49424/index.8cda34f9.css - -
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://127.0.0.1:49424/index.ba0dbf00.js - -
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[5]
      CORS policy execution failed.
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[6]
      Request origin http://127.0.0.1:49424 does not have permission to access the resource.
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[2]
      Sending file. Request path: '/index.8cda34f9.css'. Physical path: '/Users/vladislavgatsenko/Downloads/WiFiSurveyor.1.2.1.Mac/wwwroot/_content/WiFiSurveyor.Core/index.8cda34f9.css'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://127.0.0.1:49424/index.8cda34f9.css - - - 200 - text/css 8.7012ms
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[2]
      Sending file. Request path: '/index.ba0dbf00.js'. Physical path: '/Users/vladislavgatsenko/Downloads/WiFiSurveyor.1.2.1.Mac/wwwroot/_content/WiFiSurveyor.Core/index.ba0dbf00.js'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://127.0.0.1:49424/index.ba0dbf00.js - - - 200 - text/javascript 9.4111ms
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://127.0.0.1:49424/noto-sans-latin-300-normal.1aea802d.woff2 - -
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://127.0.0.1:49424/roboto-latin-300-normal.f7591131.woff2 - -
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[2]
      Sending file. Request path: '/roboto-latin-300-normal.f7591131.woff2'. Physical path: '/Users/vladislavgatsenko/Downloads/WiFiSurveyor.1.2.1.Mac/wwwroot/_content/WiFiSurveyor.Core/roboto-latin-300-normal.f7591131.woff2'
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[2]
      Sending file. Request path: '/noto-sans-latin-300-normal.1aea802d.woff2'. Physical path: '/Users/vladislavgatsenko/Downloads/WiFiSurveyor.1.2.1.Mac/wwwroot/_content/WiFiSurveyor.Core/noto-sans-latin-300-normal.1aea802d.woff2'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://127.0.0.1:49424/roboto-latin-300-normal.f7591131.woff2 - - - 200 15740 font/woff2 1.1046ms
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://127.0.0.1:49424/noto-sans-latin-300-normal.1aea802d.woff2 - - - 200 13024 font/woff2 1.1099ms
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 POST http://127.0.0.1:49424/signals/negotiate?negotiateVersion=1 - 0
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[5]
      CORS policy execution failed.
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[6]
      Request origin http://127.0.0.1:49424 does not have permission to access the resource.
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://127.0.0.1:49424/favicon.ico - -
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://127.0.0.1:49424/favicon.ico - - - 404 0 - 1.0294ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint '/signals/negotiate'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint '/signals/negotiate'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 POST http://127.0.0.1:49424/signals/negotiate?negotiateVersion=1 - 0 - 200 - application/json 24.3899ms
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://127.0.0.1:49424/signals?id=R9zBL9iePAER5vzdq76O8Q - -
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[5]
      CORS policy execution failed.
info: Microsoft.AspNetCore.Cors.Infrastructure.CorsService[6]
      Request origin http://127.0.0.1:49424 does not have permission to access the resource.
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint '/signals'
warn: WiFiSurveyor[0]
      Could not parse signal data: For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
warn: WiFiSurveyor[0]
      Could not parse signal data: For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
warn: WiFiSurveyor[0]
      Could not parse signal data: For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
warn: WiFiSurveyor[0]
      Could not parse signal data: For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
warn: WiFiSurveyor[0]
      Could not parse signal data: For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
warn: WiFiSurveyor[0]
      Could not parse signal data: For diagnosing Wi-Fi related issues, use the Wireless Diagnostics app or wdutil command line tool.
^Cinfo: Microsoft.Hosting.Lifetime[0]
      Application is shutting down...
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint '/signals'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished HTTP/1.1 GET http://127.0.0.1:49424/signals?id=R9zBL9iePAER5vzdq76O8Q - - - 101 - - 6210.4602ms

Save/load signal data

As a user, I want to be able to load my previous surveys, so that I don't need to walk all over my house again.

Acceptance criteria:

  • new "Save" button allows user to save all surveyed signal data to a file
  • save file includes base64-encoded background image (and file name?), along with coordinates and all signals for each data point
  • new "Load" button allows user to select file to load signal data from
  • loading clears/replaces any data currently entered

Notes:

  • is there any way to just snapshot the entire app state?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.