Use proper ping library

This commit is contained in:
Łukasz Moskała 2024-10-06 14:22:39 +02:00
parent 2caf97d535
commit d00eb80292
3 changed files with 28 additions and 12 deletions

7
go.mod
View file

@ -6,3 +6,10 @@ require (
github.com/gorilla/mux v1.8.1 github.com/gorilla/mux v1.8.1
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
) )
require (
github.com/digineo/go-logwrap v0.0.0-20181106161722-a178c58ea3f0 // indirect
github.com/digineo/go-ping v1.1.0 // indirect
golang.org/x/net v0.24.0 // indirect
golang.org/x/sys v0.19.0 // indirect
)

8
go.sum
View file

@ -1,5 +1,13 @@
github.com/digineo/go-logwrap v0.0.0-20181106161722-a178c58ea3f0 h1:OT/LKmj81wMymnWXaKaKBR9n1vPlu+GC0VVKaZP6kzs=
github.com/digineo/go-logwrap v0.0.0-20181106161722-a178c58ea3f0/go.mod h1:DmqdumeAKGQNU5E8MN0ruT5ZGx8l/WbAsMbXCXcSEts=
github.com/digineo/go-ping v1.1.0 h1:HXZPBw8/Zk+tFuHrHejBTLopcEkqK4FNn1ocqKo6xhw=
github.com/digineo/go-ping v1.1.0/go.mod h1:rVhwm0cbn6i20vX/MBmo4OoxOvAW/6JiIf+2Oln8n0M=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

View file

@ -4,6 +4,7 @@ import (
"crypto/tls" "crypto/tls"
_ "embed" _ "embed"
"encoding/json" "encoding/json"
"github.com/digineo/go-ping"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
"log" "log"
@ -11,7 +12,6 @@ import (
"net/http" "net/http"
"net/netip" "net/netip"
"os" "os"
"os/exec"
"sync" "sync"
"time" "time"
) )
@ -50,6 +50,7 @@ var p PersistenceT
//go:embed index.html //go:embed index.html
var indexhtml []byte var indexhtml []byte
var pinger *ping.Pinger
func main() { func main() {
@ -80,6 +81,12 @@ func main() {
if p.Subnets == nil { if p.Subnets == nil {
p.Subnets = make(map[string]SubnetT) p.Subnets = make(map[string]SubnetT)
} }
pinger, err = ping.New("0.0.0.0", "")
if err != nil {
log.Fatalf("Failed to create pinger: %s", err)
}
go scanner() go scanner()
r := mux.NewRouter() r := mux.NewRouter()
r.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) { r.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
@ -107,16 +114,9 @@ func main() {
} }
func ping(addr string) bool { func PingFunc(addr net.IPAddr) bool {
cmd := exec.Command("ping", "-n", "-W", "0.2", "-c", "1", addr) _, err := pinger.PingAttempts(&addr, 200*time.Millisecond, 2)
cmd.Stdin = nil return err == nil
cmd.Stdout = nil
cmd.Stderr = nil
err := cmd.Run()
if err == nil {
return true
}
return false
} }
func scanner() { func scanner() {
@ -159,7 +159,8 @@ func scanner() {
persistenceSubnet.TotalAddresses++ persistenceSubnet.TotalAddresses++
//fmt.Println(addr.String()) //fmt.Println(addr.String())
persistenceSubnet.HostList = append(persistenceSubnet.HostList, addr.String()) persistenceSubnet.HostList = append(persistenceSubnet.HostList, addr.String())
pingstate := ping(addr.String()) x := net.IPAddr{IP: net.ParseIP(addr.String())}
pingstate := PingFunc(x)
host, ok := persistenceSubnet.Hosts[addr.String()] host, ok := persistenceSubnet.Hosts[addr.String()]
if pingstate { if pingstate {
persistenceSubnet.UsedAddresses++ persistenceSubnet.UsedAddresses++