func (dev *utunDev) Write(data []byte) (int, error) {
	_n := copy(dev.wBuf[4:], data)
	n, err := dev.f.Write(dev.wBuf[:_n+4])
	return n - 4, err
}
one packet, no more than MTU
package tun
import (
	"fmt"
	"io"
	"net"
	"os"
	"os/exec"
	"strconv"
	"syscall"
	"unsafe"
)
const (
	bufSize = MaximumIPPacketSize + 4
)
const (
	appleUTUNCtl     = "com.apple.net.utun_control"
	appleCTLIOCGINFO = (0x40000000 | 0x80000000) | ((100 & 0x1fff) << 16) | uint32(byte('N'))<<8 | 3
)
type sockaddrCtl struct {
	scLen      uint8
	scFamily   uint8
	ssSysaddr  uint16
	scID       uint32
	scUnit     uint32
	scReserved [5]uint32
}
type utunDev struct {
	addr   string
	addrIP net.IP
	gw     string
	gwIP   net.IP
	rBuf [bufSize]byte
	wBuf [bufSize]byte
	baseDevice
}
func (dev *utunDev) Read(data []byte) (int, error) {
	n, err := dev.f.Read(dev.rBuf[:])
	if n > 0 {
		copy(data, dev.rBuf[4:n])
		n -= 4
	}
	if err != nil && dev.isClosed() {
		err = io.EOF
	}
	return n, err
}