nic added
This commit is contained in:
parent
05ee390bc2
commit
30075ad015
75
nic/nic.go
Normal file
75
nic/nic.go
Normal file
|
@ -0,0 +1,75 @@
|
|||
package nic
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
omm "git.loafle.net/overflow/model/meta"
|
||||
omn "git.loafle.net/overflow/model/net"
|
||||
oun "git.loafle.net/overflow/util-go/net"
|
||||
oung "git.loafle.net/overflow/util-go/net/gateway"
|
||||
)
|
||||
|
||||
func DiscoverGateway() (net.IP, string, error) {
|
||||
return oung.DiscoverGateway()
|
||||
}
|
||||
|
||||
func DiscoverInterfaces() ([]*omn.Interface, error) {
|
||||
gwIP, gwIface, err := DiscoverGateway()
|
||||
if nil != err {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
netIfaces, err := net.Interfaces()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ifaces := make([]*omn.Interface, 0)
|
||||
|
||||
for _, netIface := range netIfaces {
|
||||
if netIface.Flags&net.FlagLoopback != 0 || netIface.Flags&net.FlagUp == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
iface := &omn.Interface{}
|
||||
ifaces = append(ifaces, iface)
|
||||
|
||||
iface.Iface = netIface.Name
|
||||
iface.Mac = netIface.HardwareAddr.String()
|
||||
iface.Addresses = make([]*omn.InterfaceAddress, 0)
|
||||
|
||||
netAddrs, err := netIface.Addrs()
|
||||
if nil != err {
|
||||
continue
|
||||
}
|
||||
|
||||
LOOP_ADDR:
|
||||
for _, netAddr := range netAddrs {
|
||||
_, ipNet, err := oun.ParseCIDR(netAddr.String())
|
||||
if nil != err {
|
||||
continue
|
||||
}
|
||||
|
||||
addr := &omn.InterfaceAddress{}
|
||||
iface.Addresses = append(iface.Addresses, addr)
|
||||
addr.Address = netAddr.String()
|
||||
addr.Netmask = ipNet.Mask.String()
|
||||
addr.Network = ipNet.Network().String()
|
||||
|
||||
if gwIface == netIface.Name {
|
||||
addr.Gateway = gwIP.String()
|
||||
}
|
||||
|
||||
switch ipNet.Version() {
|
||||
case 4:
|
||||
addr.MetaIPType = omm.ToMetaIPType(omm.MetaIPTypeEnumV4)
|
||||
case 6:
|
||||
addr.MetaIPType = omm.ToMetaIPType(omm.MetaIPTypeEnumV6)
|
||||
default:
|
||||
continue LOOP_ADDR
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ifaces, nil
|
||||
}
|
41
nic/nic_test.go
Normal file
41
nic/nic_test.go
Normal file
|
@ -0,0 +1,41 @@
|
|||
package nic
|
||||
|
||||
import (
|
||||
"log"
|
||||
"testing"
|
||||
|
||||
omm "git.loafle.net/overflow/model/meta"
|
||||
)
|
||||
|
||||
func TestDiscoverGateway(t *testing.T) {
|
||||
gwIP, gwIface, err := DiscoverGateway()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
t.Log("Gateway found")
|
||||
t.Log("Iface: ", gwIface)
|
||||
t.Log("IP: ", gwIP.String())
|
||||
}
|
||||
|
||||
func TestDiscoverInterfaces(t *testing.T) {
|
||||
ifaces, err := DiscoverInterfaces()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
t.Log("Interface found:")
|
||||
for _, iface := range ifaces {
|
||||
t.Log("Iface: ", iface.Iface)
|
||||
t.Log("Mac: ", iface.Mac)
|
||||
|
||||
for _, addr := range iface.Addresses {
|
||||
t.Log("- IP version: ", omm.ToMetaIPTypeEnum(addr.MetaIPType).String())
|
||||
t.Log("- IP address: ", addr.Address)
|
||||
t.Log("- Netmask: ", addr.Netmask)
|
||||
t.Log("- Network: ", addr.Network)
|
||||
t.Log("- Gateway: ", addr.Gateway)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user