summaryrefslogtreecommitdiff
path: root/network/ip.go
diff options
context:
space:
mode:
Diffstat (limited to 'network/ip.go')
-rw-r--r--network/ip.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/network/ip.go b/network/ip.go
new file mode 100644
index 0000000..0c6451e
--- /dev/null
+++ b/network/ip.go
@@ -0,0 +1,33 @@
+package network
+
+import (
+ "fmt"
+ "log/slog"
+ "math/rand"
+ "net"
+)
+
+func GetOutboundIP() net.IP {
+ conn, err := net.Dial("udp", "8.8.8.8:80")
+ if err != nil {
+ slog.Error("err", err)
+ }
+ defer conn.Close()
+
+ localAddr := conn.LocalAddr().(*net.UDPAddr)
+
+ return localAddr.IP
+}
+
+func GetRandomAvailablePort() (int, error) {
+ for i := 0; i < 100; i += 1 {
+ port := rand.Intn(65535-1024) + 1024
+ addr := fmt.Sprintf(":%d", port)
+ ln, err := net.Listen("tcp", addr)
+ if err == nil {
+ defer ln.Close()
+ return port, nil
+ }
+ }
+ return 0, fmt.Errorf("failed to find an available port after multiple attempts")
+}