| 12345678910111213141516171819202122232425262728293031323334 | 
							- package libbox
 
- import (
 
- 	"golang.org/x/sys/unix"
 
- )
 
- // kanged from wireauard-apple
 
- const utunControlName = "com.apple.net.utun_control"
 
- func GetTunnelFileDescriptor() int32 {
 
- 	ctlInfo := &unix.CtlInfo{}
 
- 	copy(ctlInfo.Name[:], utunControlName)
 
- 	for fd := 0; fd < 1024; fd++ {
 
- 		addr, err := unix.Getpeername(fd)
 
- 		if err != nil {
 
- 			continue
 
- 		}
 
- 		addrCTL, loaded := addr.(*unix.SockaddrCtl)
 
- 		if !loaded {
 
- 			continue
 
- 		}
 
- 		if ctlInfo.Id == 0 {
 
- 			err = unix.IoctlCtlInfo(fd, ctlInfo)
 
- 			if err != nil {
 
- 				continue
 
- 			}
 
- 		}
 
- 		if addrCTL.ID == ctlInfo.Id {
 
- 			return int32(fd)
 
- 		}
 
- 	}
 
- 	return -1
 
- }
 
 
  |