mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-08-10 13:20:33 +02:00
cmd/cli: use powershell to get physical interfaces
This commit is contained in:
@@ -1,34 +0,0 @@
|
|||||||
package cli
|
|
||||||
|
|
||||||
import "strings"
|
|
||||||
|
|
||||||
// Copied from https://gist.github.com/Ultraporing/fe52981f678be6831f747c206a4861cb
|
|
||||||
|
|
||||||
// Mac Address parts to look for, and identify non-physical devices. There may be more, update me!
|
|
||||||
var macAddrPartsToFilter = []string{
|
|
||||||
"00:03:FF", // Microsoft Hyper-V, Virtual Server, Virtual PC
|
|
||||||
"0A:00:27", // VirtualBox
|
|
||||||
"00:00:00:00:00", // Teredo Tunneling Pseudo-Interface
|
|
||||||
"00:50:56", // VMware ESX 3, Server, Workstation, Player
|
|
||||||
"00:1C:14", // VMware ESX 3, Server, Workstation, Player
|
|
||||||
"00:0C:29", // VMware ESX 3, Server, Workstation, Player
|
|
||||||
"00:05:69", // VMware ESX 3, Server, Workstation, Player
|
|
||||||
"00:1C:42", // Microsoft Hyper-V, Virtual Server, Virtual PC
|
|
||||||
"00:0F:4B", // Virtual Iron 4
|
|
||||||
"00:16:3E", // Red Hat Xen, Oracle VM, XenSource, Novell Xen
|
|
||||||
"08:00:27", // Sun xVM VirtualBox
|
|
||||||
"7A:79", // Hamachi
|
|
||||||
}
|
|
||||||
|
|
||||||
// Filters the possible physical interface address by comparing it to known popular VM Software addresses
|
|
||||||
// and Teredo Tunneling Pseudo-Interface.
|
|
||||||
//
|
|
||||||
//lint:ignore U1000 use in net_windows.go
|
|
||||||
func isPhysicalInterface(addr string) bool {
|
|
||||||
for _, macPart := range macAddrPartsToFilter {
|
|
||||||
if strings.HasPrefix(strings.ToLower(addr), strings.ToLower(macPart)) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
@@ -49,6 +49,7 @@ func validInterface(iface *net.Interface, validIfacesMap map[string]struct{}) bo
|
|||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validInterfacesMap returns a set of all valid hardware ports.
|
||||||
func validInterfacesMap() map[string]struct{} {
|
func validInterfacesMap() map[string]struct{} {
|
||||||
b, err := exec.Command("networksetup", "-listallhardwareports").Output()
|
b, err := exec.Command("networksetup", "-listallhardwareports").Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
+19
-8
@@ -1,7 +1,10 @@
|
|||||||
package cli
|
package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"bytes"
|
||||||
"net"
|
"net"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func patchNetIfaceName(iface *net.Interface) error {
|
func patchNetIfaceName(iface *net.Interface) error {
|
||||||
@@ -11,13 +14,21 @@ func patchNetIfaceName(iface *net.Interface) error {
|
|||||||
// validInterface reports whether the *net.Interface is a valid one.
|
// validInterface reports whether the *net.Interface is a valid one.
|
||||||
// On Windows, only physical interfaces are considered valid.
|
// On Windows, only physical interfaces are considered valid.
|
||||||
func validInterface(iface *net.Interface, validIfacesMap map[string]struct{}) bool {
|
func validInterface(iface *net.Interface, validIfacesMap map[string]struct{}) bool {
|
||||||
if iface == nil {
|
_, ok := validIfacesMap[iface.Name]
|
||||||
return false
|
return ok
|
||||||
}
|
|
||||||
if isPhysicalInterface(iface.HardwareAddr.String()) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func validInterfacesMap() map[string]struct{} { return nil }
|
// validInterfacesMap returns a set of all physical interfaces.
|
||||||
|
func validInterfacesMap() map[string]struct{} {
|
||||||
|
out, err := powershell("Get-NetAdapter -Physical | Select-Object -ExpandProperty Name")
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
m := make(map[string]struct{})
|
||||||
|
scanner := bufio.NewScanner(bytes.NewReader(out))
|
||||||
|
for scanner.Scan() {
|
||||||
|
ifaceName := strings.TrimSpace(scanner.Text())
|
||||||
|
m[ifaceName] = struct{}{}
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user