Files
v2ray_simple/netLayer/interface_darwin.go
e1732a364fed 673bf2faf1 修订文档,代码;令关闭tun时不卡住;-d自动下载wintun.dll;notun编译tag
新增 notun  build tag,取消 tun和 gui之间的关联。
2022-12-19 08:41:25 +08:00

58 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package netLayer
import (
"errors"
"net"
"syscall"
"golang.org/x/net/route"
)
/*
我们的auto route使用纯命令行方式。
sing-box 使用了另一种系统级别的方式。使用了
golang.org/x/net/route
下面给出一些参考
https://github.com/libp2p/go-netroute
https://github.com/jackpal/gateway/issues/27
https://github.com/GameXG/gonet/blob/master/route/route_windows.go
除了 GetGateway之外还可以使用更多其他代码
*/
func GetGateway() (ip net.IP, index int, err error) {
var rib []byte
rib, err = route.FetchRIB(syscall.AF_INET, syscall.NET_RT_DUMP, 0)
if err != nil {
return
}
var msgs []route.Message
msgs, err = route.ParseRIB(syscall.NET_RT_DUMP, rib)
if err != nil {
return
}
for _, m := range msgs {
switch m := m.(type) {
case *route.RouteMessage:
switch sa := m.Addrs[syscall.RTAX_GATEWAY].(type) {
case *route.Inet4Addr:
ip = net.IPv4(sa.IP[0], sa.IP[1], sa.IP[2], sa.IP[3])
case *route.Inet6Addr:
ip = make(net.IP, net.IPv6len)
copy(ip, sa.IP[:])
}
index = m.Index
return
}
}
err = errors.New("no gateway")
return
}