es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

eBPF bcctools obtiene contenido de tracepipe

Este es un pequeño programa que rastrea la comunicación en tracepipe. Mi pregunta es ¿cómo accedo al contenido de tracepipe utilizando bcctools?
Intenté leer manualmente el archivo usando fopen, pero eso no funciona, ¿hay alguna función de la que no estoy al tanto?
“`
Modificado #define KBUILD_MODNAME "filtro"

#include <linux bpf.h="">
#include <linux if_ether.h="">
#include <linux ip.h="">
#include <linux in.h="">
#include <linux udp.h="">
#include <linux if_packet.h="">
#include <linux if_vlan.h="">

int udpfilter(struct xdp_md <em>ctx) {
bpf_trace_printk("obtuve un paquete\n");
void *data = (void *)(long)ctx->data;
void *data_end = (void *)(long)ctx->data_end;
struct ethhdr *eth = data;
if ((void</em>)eth + sizeof(eth) <= data_end) {
struct iphdr <em>ip = data + sizeof(eth);
if ((void</em>)ip + sizeof(ip) <= data_end) {
if (ip->protocol == IPPROTO_UDP) {
struct udphdr <em>udp = (void</em>)ip + sizeof(ip);
if ((void<em>)udp + sizeof(</em>udp) <= data_end) {
if (udp->dest == ntohs(7999)) {
bpf_trace_printk("puerto udp 7999\n");
udp->dest = ntohs(7998);
}
}
}
}
}
return XDP_PASS;
}
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para acceder al contenido de tracepipe utilizando bcctools, puede utilizar el archivo “trace” o “trace_pipe” que se encuentra en el directorio /sys/kernel/debug/tracing. Puede leer el contenido de tracepipe utilizando el comando “cat” seguido de la ruta del archivo trace_pipe. Por ejemplo, para ver la salida de las declaraciones bpf_trace_printk en el fragmento de código anterior, puede ejecutar el siguiente comando en la terminal:

    `
    sudo cat / sys / kernel / debug / tracing / trace_pipe
    `

    Esto mostrará la salida de tracepipe en la terminal. Tenga en cuenta que debe tener privilegios de root para acceder al archivo trace_pipe.

    Alternativamente, puede utilizar el comando “bpftool” para acceder a la salida de tracepipe. El comando “bpftool trace” le permite rastrear eventos generados por un programa BPF, similar a la salida de tracepipe. Por ejemplo, para rastrear los eventos generados por el programa BPF anterior, puede ejecutar el siguiente comando:

    `
    sudo bpftool trace pipe / sys / kernel / debug / tracing / trace_pipe
    `

    Esto mostrará la salida de tracepipe en la terminal, de manera similar al comando “cat”.

    En resumen, para acceder al contenido de tracepipe utilizando bcctools, puede leer el archivo “trace_pipe” en el directorio /sys/kernel/debug/tracing utilizando el comando “cat” o utilizar el comando “bpftool trace” para rastrear los eventos generados por un programa BPF.

Comments are closed.