cursed-ping/main.go
Alexey Novikov fa756500d3
initial
2025-02-07 13:32:34 +03:00

57 lines
951 B
Go

package main
import (
"errors"
"fmt"
"log"
"net"
"os"
"os/signal"
"github.com/cilium/ebpf"
"github.com/cilium/ebpf/link"
)
func main() {
if len(os.Args) < 2 {
log.Fatalf("specify a network interface")
}
ifaceName := os.Args[1]
iface, err := net.InterfaceByName(ifaceName)
if err != nil {
log.Fatalf("lookup network iface %q: %s", ifaceName, err)
}
var objs pingerObjects
if err := loadPingerObjects(&objs, nil); err != nil {
var verr *ebpf.VerifierError
if errors.As(err, &verr) {
fmt.Printf("%+v\n", verr)
}
}
defer objs.Close()
link, err := link.AttachXDP(link.XDPOptions{
Program: objs.Pinger,
Interface: iface.Index,
})
if err != nil {
log.Fatal("attaching XDP:", err)
}
defer link.Close()
log.Printf("attached to %s", ifaceName)
stop := make(chan os.Signal, 5)
signal.Notify(stop, os.Interrupt)
for {
select {
case <-stop:
log.Print("received signal, exiting..")
return
}
}
}