Hello, World!

This commit is contained in:
2026-07-21 20:58:05 +02:00
commit 8a45d91e8d
6 changed files with 273 additions and 0 deletions

87
client/main.go Normal file
View File

@@ -0,0 +1,87 @@
package main
import (
"encoding/binary"
"log"
"net"
"os"
"baalvpn/shared"
)
const SERVER_IP = "172.20.12.47"
var (
internalIP net.IP = nil
)
func main() {
if os.Geteuid() != 0 {
panic("root permissions needed")
}
listenAddr, err := net.ResolveUDPAddr("udp", ":38001")
if err != nil {
panic(err)
}
listener, err := net.ListenUDP("udp", listenAddr)
if err != nil {
panic(err)
}
defer listener.Close()
go receivePackets(listener)
register(listener)
<-make(chan int) // block forever
}
func register(c *net.UDPConn) {
serverAddr, err := net.ResolveUDPAddr("udp", SERVER_IP+":38000")
if err != nil {
panic(err)
}
req := shared.BuildPkt(shared.REQ_REGISTER, []byte{})
if _, err := c.WriteToUDP(req, serverAddr); err != nil {
panic(err)
}
}
func receivePackets(listener *net.UDPConn) {
for {
buffer := make([]byte, 50000)
n, addr, err := listener.ReadFromUDP(buffer)
if err != nil {
log.Println(err)
continue
}
if n == 0 {
continue
}
go receivePacket(listener, buffer[:n], addr)
}
}
func receivePacket(c *net.UDPConn, pkt []byte, addr *net.UDPAddr) {
if len(pkt) < 4 {
log.Println("packet too short")
return
}
version := binary.LittleEndian.Uint16(pkt[0:])
if version != shared.PROTO_VERSION {
log.Println("mismatched packet version")
return
}
pktType := binary.LittleEndian.Uint16(pkt[2:])
switch pktType {
case shared.RESP_REGISTER:
internalIP = net.IP(pkt[4:])
log.Println("Received IP from the server:", internalIP.String())
default:
log.Println("unknown packet type")
}
}