github.com/sagernet/sing@v0.2.6/common/control/bind_finder.go (about) 1 package control 2 3 import "net" 4 5 type InterfaceFinder interface { 6 InterfaceIndexByName(name string) (int, error) 7 InterfaceNameByIndex(index int) (string, error) 8 } 9 10 func DefaultInterfaceFinder() InterfaceFinder { 11 return (*netInterfaceFinder)(nil) 12 } 13 14 type netInterfaceFinder struct{} 15 16 func (w *netInterfaceFinder) InterfaceIndexByName(name string) (int, error) { 17 netInterface, err := net.InterfaceByName(name) 18 if err != nil { 19 return 0, err 20 } 21 return netInterface.Index, nil 22 } 23 24 func (w *netInterfaceFinder) InterfaceNameByIndex(index int) (string, error) { 25 netInterface, err := net.InterfaceByIndex(index) 26 if err != nil { 27 return "", err 28 } 29 return netInterface.Name, nil 30 }