forked from moony/mullfast
Started adding commentation.
This commit is contained in:
parent
9ec9201f28
commit
adcb3fc5f4
|
@ -17,9 +17,13 @@ import (
|
|||
"github.com/nuttapp/pinghist/ping"
|
||||
)
|
||||
|
||||
// Set the banner for advertisement
|
||||
const BANNER = "ICAgKiAgICAgICAgICAgICAgICAgICgKICggIGAgICAgICAgICAgKCAgICggIClcICkgICAgICAgICAgICAgICkKIClcKSkoICAgICAoICAgKVwgIClcKCgpLyggICAgKSAgICAgICggLygKKChfKSgpXCAgICkpXCAoKF8pKChfKS8oXykpKCAvKCAgKCAgIClcKCkpCihfKCkoKF8pIC8oKF8pIF8gICBfIChfKSlffCkoXykpIClcIChfKSkvCnwgIFwvICB8KF8pKSggfCB8IHwgfHwgfF8gKChfKV8gKChfKXwgfF8KfCB8XC98IHx8IHx8IHx8IHwgfCB8fCBfX3wvIF9gIHwoXy08fCAgX3wKfF98ICB8X3wgXF8sX3x8X3wgfF98fF98ICBcX18sX3wvX18vIFxfX3wK"
|
||||
|
||||
// Set the Mullvad API URL
|
||||
const URL = "https://api.mullvad.net/www/relays/all"
|
||||
|
||||
// Server struct
|
||||
type Server struct {
|
||||
List []float64
|
||||
Last float64
|
||||
|
@ -32,11 +36,13 @@ type Server struct {
|
|||
Type string
|
||||
}
|
||||
|
||||
// Variable server lists
|
||||
var (
|
||||
servers []*Server
|
||||
active []*Server
|
||||
)
|
||||
|
||||
// Type for server lists
|
||||
type ByLast []*Server
|
||||
|
||||
// Length method
|
||||
|
@ -48,11 +54,12 @@ func (a ByLast) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
|||
// Less method
|
||||
func (a ByLast) Less(i, j int) bool { return a[i].Last < a[j].Last }
|
||||
|
||||
// Ping method
|
||||
// Ping server to determine latency
|
||||
func (s *Server) Ping() (float64, error) {
|
||||
// for i := 0; i < 3; i++ {
|
||||
ct.ChangeColor(ct.Cyan, false, ct.None, false)
|
||||
fmt.Println("[*] Testing server:", s.URL)
|
||||
|
||||
r, err := ping.Ping(s.URL)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
|
@ -64,39 +71,37 @@ func (s *Server) Ping() (float64, error) {
|
|||
|
||||
s.List = append(s.List, r.Time)
|
||||
s.Last = r.Time
|
||||
|
||||
return s.Last, nil
|
||||
}
|
||||
|
||||
// main function
|
||||
func main() {
|
||||
// Decode banner
|
||||
banner, err := base64.RawStdEncoding.DecodeString(BANNER)
|
||||
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
if err != nil {
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
fmt.Println(err)
|
||||
} else {
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
fmt.Printf("%s\n", banner)
|
||||
}
|
||||
ct.ResetColor()
|
||||
|
||||
// Create prompt for VPN type
|
||||
prompt := ui.Select{
|
||||
Label: "Select Mullvad VPN type",
|
||||
Items: []string{"WireGuard", "OpenVPN", "Cancel"},
|
||||
}
|
||||
|
||||
_, promptResult, err := prompt.Run()
|
||||
|
||||
if err != nil {
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
fmt.Println("\n[!] User prompt failed", err)
|
||||
return
|
||||
|
||||
} else if promptResult == "Cancel" {
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
fmt.Printf("[!] Server test canceled by user, exiting...\n")
|
||||
os.Exit(0)
|
||||
|
||||
} else {
|
||||
ct.ChangeColor(ct.Cyan, true, ct.None, false)
|
||||
fmt.Printf("[*] You selected %q servers for testing\n\n", promptResult)
|
||||
|
@ -105,30 +110,42 @@ func main() {
|
|||
ct.ChangeColor(ct.Cyan, false, ct.None, false)
|
||||
fmt.Println("[*] Retrieving list of Mullvad servers...")
|
||||
|
||||
// Make API call for server list
|
||||
response, err := http.Get(URL)
|
||||
|
||||
if err != nil {
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
fmt.Println("[!] Request Error\n", err.Error())
|
||||
}
|
||||
|
||||
// Wait until the response finished
|
||||
defer response.Body.Close()
|
||||
|
||||
// Read the io return of the response
|
||||
body, err := ioutil.ReadAll(response.Body)
|
||||
if err != nil {
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
fmt.Println("[!] Error in response body\n", err.Error())
|
||||
}
|
||||
|
||||
// Unmarshal the JSON body return
|
||||
jsonErr := json.Unmarshal(body, &servers)
|
||||
|
||||
ct.ChangeColor(ct.Green, false, ct.None, false)
|
||||
fmt.Printf("[*] There are %d total servers\n", len(servers))
|
||||
if jsonErr != nil {
|
||||
ct.ChangeColor(ct.Red, false, ct.None, false)
|
||||
fmt.Println("[!] Json Error", jsonErr)
|
||||
} else {
|
||||
for i := range servers {
|
||||
servers[i].URL = servers[i].Hostname + ".mullvad.net"
|
||||
if servers[i].Type == strings.ToLower(promptResult) && servers[i].Active {
|
||||
active = append(active, servers[i])
|
||||
}
|
||||
}
|
||||
|
||||
ct.ChangeColor(ct.Green, false, ct.None, false)
|
||||
fmt.Printf("[*] Retrieved %d %s servers\n", len(servers), promptResult)
|
||||
|
||||
// Add the active servers to a list
|
||||
for i := range servers {
|
||||
servers[i].URL = servers[i].Hostname + ".mullvad.net"
|
||||
if servers[i].Type == strings.ToLower(promptResult) && servers[i].Active {
|
||||
active = append(active, servers[i])
|
||||
}
|
||||
}
|
||||
|
||||
ct.ChangeColor(ct.Green, false, ct.None, false)
|
||||
fmt.Printf("[*] There are %d active servers\n\n", len(active))
|
||||
|
||||
|
|
Loading…
Reference in New Issue