check inner packet srcIP against server-verified srcIP, Windows support
This commit is contained in:
61
client/os.go
Normal file
61
client/os.go
Normal file
@@ -0,0 +1,61 @@
|
||||
//go:build linux || darwin
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
|
||||
"github.com/songgao/water"
|
||||
)
|
||||
|
||||
var iface *water.Interface
|
||||
|
||||
func isAdmin() bool {
|
||||
return os.Geteuid() == 0
|
||||
}
|
||||
|
||||
func setupInterface() {
|
||||
config := water.Config{DeviceType: water.TUN}
|
||||
if runtime.GOOS == "linux" {
|
||||
config.Name = "baalvpn"
|
||||
} else {
|
||||
panic("TODO")
|
||||
}
|
||||
|
||||
var err error
|
||||
iface, err = water.New(config)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if runtime.GOOS == "linux" {
|
||||
if err := exec.Command("ip", "addr", "add", internalIP.String()+"/32", "dev", "baalvpn").Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if err := exec.Command("ip", "link", "set", "dev", "baalvpn", "up").Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
} else {
|
||||
if err := exec.Command("ifconfig", iface.Name(), "inet6", internalIP.String(), internalIP.String(), "prefixlen", "128", "up").Run(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func writePkt(pkt []byte) error {
|
||||
_, err := iface.Write(pkt)
|
||||
return err
|
||||
}
|
||||
|
||||
func readPkt() ([]byte, error) {
|
||||
pkt := make([]byte, 2000)
|
||||
n, err := iface.Read(pkt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return pkt[:n], nil
|
||||
}
|
||||
|
||||
func releasePkt(pkt []byte) {}
|
||||
Reference in New Issue
Block a user