Skip to content

Instantly share code, notes, and snippets.

@ryansturmer
Created September 23, 2015 18:30
Show Gist options
  • Save ryansturmer/857d312294301d77cdeb to your computer and use it in GitHub Desktop.
Save ryansturmer/857d312294301d77cdeb to your computer and use it in GitHub Desktop.
Console tool for finding FabMo tools on your network.
package main
import (
"bufio"
"fmt"
"net"
"os"
"time"
)
const BROADCAST_PORT = 24862
const MSG_OK = "YES I M !\x00"
const MSG_ERR = "I DNT UNDRSTND !\x00"
const MSG_HOSTNAME = "U NAME ?\x00"
const MSG_REQ = "R U A SBT ?\x00"
const READ_TIMEOUT = 1
func broadcast(socket *net.UDPConn) {
socket.WriteTo([]byte(MSG_REQ), &net.UDPAddr{
IP: net.IPv4(255, 255, 255, 255),
Port: BROADCAST_PORT,
})
}
func listen(socket *net.UDPConn) {
buf := make([]byte, 1024)
for {
socket.SetReadDeadline(time.Now().Add(READ_TIMEOUT * time.Second))
n, addr, err := socket.ReadFromUDP(buf)
if n > 0 && err == nil {
fmt.Printf("FabMo Tool Discovered: %v:%d\n", addr.IP, 9876)
}
}
}
func main() {
// Greeting
fmt.Println("------------------------------------------")
fmt.Println(" FabMo Tool Finder")
fmt.Println("")
fmt.Println(" Press <enter> to exit.")
fmt.Println("------------------------------------------")
// Open socket
socket, err := net.ListenUDP("udp4", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: BROADCAST_PORT,
})
defer socket.Close()
if err != nil {
fmt.Println("Error : ", err)
return
}
// Perform detection
go listen(socket)
broadcast(socket)
// Wait for user to quit
reader := bufio.NewReader(os.Stdin)
reader.ReadString('\n')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment