2017-05-29 3 views

Répondre

0

Le moyen le plus simple d'intercepter les fonctions du noyau avec BPF est probablement d'utiliser bcc. Il offre un niveau plus élevé, de l'API Python pour charger des programmes FPB dans le noyau et d'interagir avec eux:

#!/usr/bin/env python 
from bcc import BPF 

BPF(text=""" 
int kprobe__ip_rcv(struct pt_regs *ctx, struct sk_buff *skb) { 
    bpf_trace_printk("skb=%p!\\n", skb); 
    return 0; 
} 
""").trace_print() 

Retours:

 <idle>-0  [007] d.s. 1441.065248: : skb=ffff906b2bd53400! 
     <idle>-0  [007] d.s. 1442.267325: : skb=ffff906b76c5b700! 
     <idle>-0  [007] d.s. 1442.993894: : skb=ffff906b42b76800! 
     <idle>-0  [007] d.s. 1443.194334: : skb=ffff906be925d300! 
     <idle>-0  [007] d.s. 1444.616469: : skb=ffff906b67e6a200! 

Pour plus d'informations, reportez-vous the tutorial sur le référentiel Cci.

Si vous ne voulez pas utiliser bcc, vous pouvez trouver examples of BPF programs dans le noyau Linux. En particulier, je vous invite à regarder dans tracex1_kern/user.c.