mirror of
https://github.com/cryptexctl/cursed-ping.git
synced 2025-07-27 04:30:32 +00:00
57 lines
951 B
Go
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
|
|
}
|
|
}
|
|
}
|