log ipv6 addresses

This commit is contained in:
2026-07-21 22:38:34 +02:00
parent 0a968b3910
commit 0ed69fbc70
2 changed files with 22 additions and 26 deletions

View File

@@ -31,7 +31,7 @@ func main() {
panic("root permissions needed") panic("root permissions needed")
} }
listenAddr, err := net.ResolveUDPAddr("udp", ":38001") listenAddr, err := net.ResolveUDPAddr("udp", ":38000")
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@@ -1,3 +1,6 @@
// TODO: slice bounds checking
// TODO: authentication
// TODO: encryption
package main package main
import ( import (
@@ -12,7 +15,7 @@ import (
) )
type Peer struct { type Peer struct {
RealIP string RealAddr *net.UDPAddr
InternalIP string InternalIP string
} }
@@ -72,7 +75,8 @@ func receivePacket(pkt []byte, addr *net.UDPAddr) {
pktType := binary.LittleEndian.Uint16(pkt[2:]) pktType := binary.LittleEndian.Uint16(pkt[2:])
peerIP := addr.IP.String() // idk if it needs to lock the mutex
peer := peers[addr.IP.String()]
switch pktType { switch pktType {
case shared.REQ_REGISTER: case shared.REQ_REGISTER:
@@ -82,23 +86,19 @@ func receivePacket(pkt []byte, addr *net.UDPAddr) {
// TODO // TODO
internalIP := fmt.Sprintf("10.1.0.%d", nextIP) internalIP := fmt.Sprintf("10.1.0.%d", nextIP)
if peer, ok := peers[addr.IP.String()]; ok { if destPeer, ok := peers[addr.IP.String()]; ok {
internalIP = peer.InternalIP internalIP = destPeer.InternalIP
} else { } else {
peers[addr.IP.String()] = &Peer{ peers[addr.IP.String()] = &Peer{
RealIP: peerIP, RealAddr: addr,
InternalIP: internalIP, InternalIP: internalIP,
} }
nextIP++ nextIP++
} }
resp := shared.BuildPkt(shared.RESP_REGISTER, net.ParseIP(internalIP).To4()) resp := shared.BuildPkt(shared.RESP_REGISTER, net.ParseIP(internalIP).To4())
if _, err := conn.WriteToUDP(resp, addr); err != nil { sendTo(addr, resp)
log.Println(err)
}
case shared.REQ_DATA: case shared.REQ_DATA:
log.Println("received packet from " + peerIP + ":")
frame := pkt[4:] frame := pkt[4:]
etherType := binary.BigEndian.Uint16(frame[12:14]) etherType := binary.BigEndian.Uint16(frame[12:14])
payload := frame[14:] payload := frame[14:]
@@ -106,19 +106,20 @@ func receivePacket(pkt []byte, addr *net.UDPAddr) {
switch etherType { switch etherType {
case 0x0800: // IPv4 case 0x0800: // IPv4
destIP := net.IP(payload[16:20]).String() destIP := net.IP(payload[16:20]).String()
if peer := getPeerByInternalIP(destIP); peer != nil { if destPeer := getPeerByInternalIP(destIP); destPeer != nil {
log.Println("relaying to", peer.RealIP) log.Println(peer.InternalIP + " -> " + destIP)
resp := shared.BuildPkt(shared.RESP_DATA, frame) resp := shared.BuildPkt(shared.RESP_DATA, frame)
sendTo(peer.RealIP, resp) sendTo(peer.RealAddr, resp)
} else { } else {
log.Println("unknown dest IP: " + destIP) log.Println(peer.InternalIP + " -/> " + destIP + " (unrecognized IP)")
} }
case 0x0806: // ARP case 0x0806: // ARP
log.Println("broadcasting ARP") log.Println(peer.InternalIP + " -> *")
resp := shared.BuildPkt(shared.RESP_DATA, frame) resp := shared.BuildPkt(shared.RESP_DATA, frame)
broadcast(resp, peerIP) broadcast(resp, peer.InternalIP)
case 0x86dd: // IPv6 case 0x86dd: // IPv6
log.Println("IPv6") // TODO destIP := net.IP(payload[24:40]).String()
log.Println(peer.InternalIP + " -/> " + destIP + " (IPv6)") // TODO
default: default:
log.Printf("unhandled EtherType: 0x%x\n", etherType) log.Printf("unhandled EtherType: 0x%x\n", etherType)
} }
@@ -131,19 +132,14 @@ func broadcast(pkt []byte, except string) {
peersMutex.Lock() peersMutex.Lock()
defer peersMutex.Unlock() defer peersMutex.Unlock()
for _, p := range peers { for _, p := range peers {
if p.RealIP == except { if p.RealAddr.IP.String() == except {
continue continue
} }
sendTo(p.RealIP, pkt) sendTo(p.RealAddr, pkt)
} }
} }
func sendTo(ip string, pkt []byte) { func sendTo(addr *net.UDPAddr, pkt []byte) {
addr, err := net.ResolveUDPAddr("udp", ip+":38001")
if err != nil {
log.Println(err)
return
}
if _, err := conn.WriteToUDP(pkt, addr); err != nil { if _, err := conn.WriteToUDP(pkt, addr); err != nil {
log.Println(err) log.Println(err)
} }