You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

github.com/Joffref/wifi-cli

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/Joffref/wifi-cli

v1.0.0
Source
Go
Version published
Created
Source

WIFI-CLI

WIFI CLI is a command line interface to select WIFI networks. There's two main features:

  • AP mode: Select the best wifi channel for your AP.
  • Terminal mode: Select the best wifi network.

Install the CLI

go get github.com/Joffref/wifi-cli

Note: You need to have go installed on your machine. See golang.org for more information.

You also need to have git installed on your machine. See git-scm.com for more information.

Build the CLI from source

git clone https://github.com/Joffref/wifi-cli
cd wifi-cli
make build

Usage

AP mode

Usage:
  wifi-cli ap [flags]

Flags:
  -a, --AccessPointNumberWeight int   AccessPointNumberWeight (default 1)
  -r, --CoverageWeight int            CoverageWeight (default 1)
  -s, --SignalStrengthWeight int      SignalStrengthWeight (default 1)
  -h, --help                          help for ap
  -i, --interface string              wifi interface (default "wlan0")

Terminal mode

 Usage:
  wifi-cli terminal [flags]

Flags:
  -h, --help               help for terminal
  -i, --interface string   wifi interface (default "wlan0")

Using the library

As a library, you can use the ap and terminal packages to get the best wifi channel or the best wifi network. Plus, we define an interface SelectionMiddleware to define your own selection algorithm or use the included one (coverage, empty, number, signal).

package ap

//...

// SelectionMiddleware is a middleware that selects the best channel given a criteria.
type SelectionMiddleware interface {
	// Select ranks the channels based on the criteria.
	Select(ScoredChannels map[int]int, UsedChannels map[int]*Channel) (map[int]int, error)
	// Criteria returns the criteria of the middleware.
	Criteria() string
	// Name returns the name of the criteria.
	Name() string
	// SetWeight sets the weight of the criteria.
	// The weight is an int between 0 and 100.
	SetWeight(int)
}

Then you can use the ap package to get the best channel.

package main

import (
    "log"
    "github.com/Joffref/wifi-cli/ap"
)

func main() {
	chain := ap.SelectionChain{
		&ap.UnoccupiedChannel{
			Weight: ap.Infinite,
		},
		&ap.AccessPointNumber{
			Weight: 1,
		},
		&ap.Signal{
			Weight: 20,
		},
		&ap.Coverage{
			Weight: 100,
		},
	}
	chanel, err := BestChanel(ifname, chain)
	if err != nil {
		log.Errorf("Error while finding best channel: %v", err)
	}
	log.Infof("Best channel is %v", chanel)
}
func BestChanel(ifname string, chain ap.SelectionChain) (int, error) {
	return ap.FindBestChannel(ifname, chain)
}

To go further

Roadmap

  • Add a terminal mode to select the best wifi network.
  • Add a coverage criteria to select the best channel.
  • Add a signal criteria to select the best channel.
  • Add a number criteria to select the best channel.
  • Add a empty criteria to select the best channel.
  • Add a weight to each criteria.
  • Add a SelectionChain to select the best channel.
  • Add a SelectionMiddleware to define your own selection algorithm.
  • Enhance the scoring algorithm or provide a way to define your own scoring algorithm.
  • Add verbosity level.
  • Add a --json flag to output the result in json format.
  • Add a --csv flag to output the result in csv format.
  • Add a --yaml flag to output the result in yaml format.

License

This project is licensed under the MIT License - see the LICENSE file for details

FAQs

Package last updated on 21 Sep 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts