Advertisement
Guest User

network.go

a guest
Aug 26th, 2021
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.00 KB | None | 0 0
  1. ///// Main file
  2.  
  3. package inetwork
  4.  
  5. import (
  6.     "errors"
  7.     "net"
  8. )
  9.  
  10. const InterfaceWlan = "wlan0"
  11. const InterfaceEthernet = "eth0"
  12.  
  13. var netInterfaces = net.Interfaces
  14.  
  15. func GetIpAddress() (net.IP, error) {
  16.     // List interfaces (mock this return ?)
  17.     ifaces, err := netInterfaces()
  18.     if err != nil {
  19.         return nil, err
  20.     }
  21.  
  22.     for _, i := range ifaces {
  23.         // In my method, I'm interested only by eth0 and wlan0 (but in my dev env I don't have these interfaces)
  24.         if i.Name == InterfaceWlan || i.Name == InterfaceEthernet {
  25.             // Get IPs (mock method Addrs ?)
  26.             addrs, err := i.Addrs()
  27.  
  28.             if err != nil || len(addrs) == 0 {
  29.                 continue
  30.             }
  31.  
  32.             for _, addr := range addrs {
  33.                 // Check IP length
  34.                 if len(addr.String()) < 4{
  35.                     continue
  36.                 }
  37.  
  38.                 // Remove mask from IP
  39.                 ip := net.ParseIP(addr.String()[0:len(addr.String())-3])
  40.  
  41.                 // Convert to IPv4
  42.                 if ip != nil && ip.To4() != nil {
  43.                     return ip, nil
  44.                 }
  45.             }
  46.         }
  47.     }
  48.  
  49.     return nil, errors.New("network: ip not found")
  50. }
  51.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement