mirror of
https://github.com/seriousm4x/UpSnap.git
synced 2026-03-31 06:24:09 -04:00
* update ping privileged/unprivileged logic, add entrypoint Signed-off-by: invario <67800603+invario@users.noreply.github.com> * Removed entrypoint script, code in GO instead to raise NET_RAW cap Signed-off-by: invario <67800603+invario@users.noreply.github.com> * Rewritten to only split pingdevice func into separate GO files Signed-off-by: invario <67800603+invario@users.noreply.github.com> * remove runtime check * readme: cap_net_raw=+p * clear up * readme: clearify linux only * set `privileged = false` on darwin --------- Signed-off-by: invario <67800603+invario@users.noreply.github.com> Co-authored-by: Maxi Quoß <maxi@quoss.org>
41 lines
892 B
Go
41 lines
892 B
Go
package networking
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"os"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
func isNoRouteOrDownError(err error) bool {
|
|
opErr, ok := err.(*net.OpError)
|
|
if !ok {
|
|
return false
|
|
}
|
|
syscallErr, ok := opErr.Err.(*os.SyscallError)
|
|
if !ok {
|
|
return false
|
|
}
|
|
return syscallErr.Err == syscall.EHOSTUNREACH || syscallErr.Err == syscall.EHOSTDOWN
|
|
}
|
|
|
|
func CheckPort(host string, port string) (bool, error) {
|
|
timeout := 500 * time.Millisecond
|
|
conn, err := net.DialTimeout("tcp", net.JoinHostPort(host, port), timeout)
|
|
if err != nil {
|
|
// treat "host unreachable", "connection refused" and "timeout" as no error
|
|
var netErr *net.OpError
|
|
if errors.As(err, &netErr) {
|
|
if errors.Is(netErr.Err, syscall.EHOSTUNREACH) ||
|
|
errors.Is(netErr.Err, syscall.ECONNREFUSED) ||
|
|
netErr.Timeout() {
|
|
return false, nil
|
|
}
|
|
}
|
|
return false, err
|
|
}
|
|
defer conn.Close()
|
|
return conn != nil, nil
|
|
}
|