Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
gobee — अपने BPF प्रोग्राम Go में लिखें, C में नहीं। gobee Go के एक उपसमुच्चय को BPF C में ट्रांसपाइल करता है और टाइप्ड cilium/ebpf बाइंडिंग उत्पन्न करता है। | Kitploit
उपकरण/GitHubGitHub/boratanrikulu/gobee
स्थैतिक विश्लेषणकोड विश्लेषणस्क्रिप्टिंग और स्वचालनDevSecOpsउपयोगिताएँ और फ्रेमवर्कबाइनरी विश्लेषण
GitHubboratanrikulu/gobee

gobee

अपने BPF प्रोग्राम Go में लिखें, C में नहीं। gobee Go के एक उपसमुच्चय को BPF C में ट्रांसपाइल करता है और टाइप्ड cilium/ebpf बाइंडिंग उत्पन्न करता है।

रिपॉजिटरी देखें
3454144 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

gobee

अपने BPF प्रोग्राम C में नहीं, Go में लिखें। gobee Go के एक सख्त उपसमुच्चय को BPF C में ट्रांसपाइल करता है, userspace पक्ष के लिए टाइप की गई Go बाइंडिंग उत्पन्न करता है, और चल रहे कर्नेल के विरुद्ध लोड को गेट करता है।

Go इकोसिस्टम के पास BPF के लिए ठोस userspace टूलिंग है। कर्नेल पक्ष हमेशा "अब अपना प्रोग्राम C में लिखें" पर समाप्त होता है। Aya ने rustc में एक नया BPF बैकएंड लिखकर eBPF को Rust तक पहुँचाया। gobee वहाँ एक अलग रास्ते से पहुँचता है: C में ट्रांसपाइल करके और clang के परिपक्व बैकएंड का पुन: उपयोग करके।

एक Go फ़ाइल अंदर, एक BPF प्रोग्राम बाहर

एक ट्रेसपॉइंट जो हर execve को ringbuf के माध्यम से userspace तक स्ट्रीम करता है:

आपका इनपुट (Go) gobee जो उत्सर्जित करता है (BPF C)
//go:build ignore

package main

import "github.com/boratanrikulu/gobee/bpf"

//bpf:license GPL

type Event struct {
    Pid  uint32
    Comm [16]byte
}

var Events = bpf.RingBuf[Event]{
    MaxEntries: 4096,
}

//bpf:section tracepoint/syscalls/sys_enter_execve
func OnExec(ctx *bpf.ExecveEnterCtx) bpf.TpReturn {
    e, ok := Events.Reserve()
    if !ok {
        return bpf.TpOk
    }
    e.Pid = bpf.GetCurrentPid()
    bpf.GetTaskComm(&e.Comm)
    Events.Submit(e)
    return bpf.TpOk
}

func main() {}
// Code generated by gobee. DO NOT EDIT.

#include "vmlinux.h"
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_core_read.h>

char _license[] SEC("license") = "GPL";

struct Event {
    __u32 Pid;
    __u8 Comm[16];
};

struct {
    __uint(type, BPF_MAP_TYPE_RINGBUF);
    __uint(max_entries, 4096);
} Events SEC(".maps");

SEC("tracepoint/syscalls/sys_enter_execve")
int OnExec(struct trace_event_raw_sys_enter *ctx) {
    struct Event *e = bpf_ringbuf_reserve(
        &Events, sizeof(struct Event), 0);
    if (!e) {
        return 0;
    }
    e->Pid = (__u32)(
        bpf_get_current_pid_tgid() >> 32);
    bpf_get_current_comm(&e->Comm, 16);
    bpf_ringbuf_submit(e, 0);
    return 0;
}

gobee translate --bindings-dir ./bpf ./bpf/src दोनों फ़ाइलें उत्पन्न करता है, साथ ही एक sourcemap (events.bpf.c.map) ताकि verifier त्रुटियाँ Go पंक्तियों में वापस मैप हों, और एक टाइप की गई bindings फ़ाइल (bpf/events_bindings.go) ताकि userspace ड्राइवर objs.Events, objs.AttachOnExec() लिखे और ringbuf पेलोड को सीधे bpf.Event में डीकोड करे (वही struct जो आप ऊपर देखते हैं, Go में पुनः प्रकाशित), बजाय स्ट्रिंग-टाइप coll.Programs["..."] लुकअप के।

C जानबूझकर पठनीय है। यदि gobee कुछ अजीब उत्सर्जित करता है, तो आप उसे देख सकते हैं। ट्रेसपॉइंट + kprobes + XDP को एक बाइनरी में संयुक्त करने के लिए, example/sysmon/ देखें।

यह कैसे तुलना करता है

gobeeC + clang + bpf2goAya (Rust)bpftraceBCC
कर्नेल-पक्ष भाषाGo उपसमुच्चयCRustDSLC
Userspace एकीकरणटाइप की गई Go बाइंडिंग + cilium/ebpfbpf2goaya-runtimeकोई नहींpython
CO-RE✅ clang के माध्यम से✅✅ LLVM के माध्यम से✅✅
हेल्पर कवरेज200 टाइप की गई Go रैपरपूर्ण (C लिखें)पूर्णसीमितपूर्ण (C लिखें)
Verifier त्रुटि → स्रोत✅ Go file:line:col❌ कच्चा C✅ Rust file:line❌आंशिक
लोड पर कर्नेल-संस्करण गेट✅ bpfvet के माध्यम सेमैन्युअलमैन्युअलn/aरनटाइम
टूलचेन निर्भरताएँGo + clangclang + bpf2gorustc + LLVMbpftracepython + bcc
उत्पन्न आर्टिफैक्ट.bpf.o + Go binary.bpf.o + Go binary.bpf.o + Rust binaryJITJIT

यदि आप पहले से ही C / libbpf वर्कफ़्लो में हैं, तो gobee इसे पूरी तरह से बदलने की कोशिश नहीं कर रहा है। यह उन मामलों के लिए है जहाँ आप कर्नेल पक्ष, userspace पक्ष और बिल्ड पाइपलाइन सब कुछ एक ही Go मॉड्यूल में चाहते हैं।

आज क्या समर्थित है

पूर्ण मैट्रिक्स के लिए docs/status.md देखें (Go उपसमुच्चय, कथन, व्यंजक, हर हेल्पर, हर मैप प्रकार, हर निर्देश)। त्वरित दृश्य:

क्षेत्रकवरेज
प्रोग्राम प्रकार (8)XDP, tracepoint, kprobe / kretprobe, uprobe / uretprobe, sock_ops, TC, cgroup_skb, LSM
मैप प्रकार (19)array, hash, lru_hash, per-CPU वेरिएंट, bloom_filter, lpm_trie, ringbuf, perf_event_array, prog_array, queue, stack, sk/task/inode storage, devmap/cpumap/xskmap
BPF हेल्परlibbpf v1.5.0 हेडर से स्वतः-उत्पन्न ~200 टाइप की गई Go स्टब्स। example/helloworld/ और example/sysmon/ द्वारा उपयोग की गई स्टब्स वास्तविक-कर्नेल CI में परीक्षित हैं; बाकी असत्यापित हैं। यदि कोई स्टब कर्नेल सिग्नेचर से मेल नहीं खाती तो issue दर्ज करें
CO-RE✅ स्वतः-पता लगाया गया। कर्नेल-आंतरिक struct फ़ील्ड के लिए BPF_CORE_READ (task_struct, sock, inode); UAPI BPF संदर्भ struct के लिए सीधा ctx->field (xdp_md, __sk_buff, bpf_sock_ops)। Linux 6.x (Ubuntu 24.04 CI) पर परीक्षित; पुराने कर्नेल अभी CI मैट्रिक्स में नहीं हैं
BTF-तैयार आउटपुट✅ उत्सर्जित C में vmlinux.h शामिल है और कर्नेल-आंतरिक फ़ील्ड रीड के लिए BPF_CORE_READ का उपयोग करता है, ताकि clang clang -g से उत्पन्न BTF सही रिलोकेशन ले जाए। clang स्वयं आपकी ज़िम्मेदारी है (उदाहरण Makefiles विहित इनवोकेशन दिखाती हैं)
उपयोगकर्ता-परिभाषित हेल्पर✅ //bpf:section के बिना टॉप-लेवल Go फ़ंक्शन static __always_inline C फ़ंक्शन के रूप में उत्सर्जित होते हैं
टाइप की गई Go बाइंडिंग✅ Load<Stem>, Close, प्रति-प्रोग्राम Attach<Name>, AttachAll, साथ ही आपके कर्नेल-पक्ष struct प्रकार और स्थिरांक Go में पुनः प्रकाशित
कर्नेल-संस्करण गेट✅ bpfvet लोड समय पर चलता है। अपारदर्शी EINVAL के बजाय bpf program needs kernel >= 5.8, host is 5.4 के साथ तेज़ी से विफल होता है
Verifier त्रुटि → Go स्रोत✅ Load<Stem> के अंदर स्वतः-एनोटेटेड। gobee diagnose के लिए कोई मैन्युअल पाइप नहीं; *ebpf.VerifierError → counter.go:18:5 मार्करों के साथ वापस आता है
Sourcemap साइडकार✅ ऑफ़लाइन gobee diagnose उपयोग के लिए भी हर .bpf.c के बगल में <stem>.bpf.c.map लिखा जाता है
क्रॉस-आर्क✅ Linux arm64 + amd64

gobee क्या करता है

  • Go उपसमुच्चय को BPF C में ट्रांसपाइल करता है (और पहले आपके इनपुट पर go/types चलाता है, ताकि दुरुपयोग file:line:col पर उजागर हों)।
  • .bpf.c के बगल में एक टाइप की गई <Stem>_bindings.go उत्पन्न करता है: bpf.LoadCounter(spec), objs.PerIface.Lookup(...), objs.AttachAll(ifindex), साथ ही आपके कर्नेल-पक्ष struct प्रकार और स्थिरांक Go में पुनः प्रकाशित।
  • LoadAndAssign से *ebpf.VerifierError को Go स्रोत स्थितियों के साथ स्वतः एनोटेट करता है, किसी मैन्युअल gobee diagnose पाइप की आवश्यकता नहीं।
  • Load<Stem> के अंदर bpfvet चलाता है ताकि पुराने कर्नेल bpf program needs kernel >= 5.8, host is 5.4 के साथ तेज़ी से विफल हों।
  • libbpf v1.5.0 हेल्पर सेट के लिए ~200 टाइप की गई Go स्टब्स उपलब्ध कराता है, साथ ही उपयोगकर्ता-परिभाषित हेल्पर फ़ंक्शन जो static __always_inline के रूप में उत्सर्जित होते हैं।

gobee क्या नहीं करेगा

  • clang को प्रतिस्थापित करना। clang का BPF बैकएंड हमें मुफ्त में CO-RE, BTF और verifier-अनुकूल कोडजन देता है। इसे फिर से लागू करने में वर्षों लगते हैं और कुछ हासिल नहीं होता।
  • cilium/ebpf को प्रतिस्थापित करना। उत्पन्न बाइंडिंग इसके ऊपर बैठती हैं।
  • BPF को छिपाना। Go उपसमुच्चय BPF C मुहावरों से 1:1 मैप होता है। यदि आप BPF जानते हैं, तो gobee महज हल्का सिंटैक्टिक शुगर है। यदि नहीं जानते, तो मैनुअल अभी भी आवश्यक पठन है।
  • आपके लिए clang चलाना। संकलन, एम्बेड और लोड उपयोगकर्ता के स्वामित्व में रहते हैं। bpf2go के समान पैटर्न।

सीधे BPF उत्पन्न करने के बजाय ट्रांसपाइल क्यों?

gc, Go कंपाइलर, के पास कोई LLVM-आधारित BPF बैकएंड नहीं है। एक जोड़ना एक बहु-वर्षीय कंपाइलर परियोजना है। rustc LLVM पर बना है और इसीलिए Aya काम करता है। इसलिए gobee C उत्सर्जित करता है और clang के BPF बैकएंड का पुन: उपयोग करता है, जो हमें मुफ्त में परिपक्व कोडजन, BTF और CO-RE रिलोकेशन देता है।

त्वरित प्रारंभ

go install github.com/boratanrikulu/gobee/cmd/gobee@latest
टूल डाउनलोड करें