Score:0

bpftrace: พยายามรับ IP และพอร์ตบน tcp_cleanup_rbuf()

ธง jp

ฉันติด tcp_cleanup_rbuf() และฉันพยายามดึงข้อมูล IP และพอร์ตออกจากคิว skb แต่ดูเหมือนว่าจะว่างเปล่า ถูกต้องหรือไม่? ณ จุดนั้นมันเป็นอิสระแล้วหรือยัง?

นี่คือเชลล์สคริปต์ที่ฉันกำลังทดสอบด้วย แก้ไขพาธไปยังซอร์สไดเร็กทอรีเคอร์เนลของคุณ เรียกใช้และเรียกใช้ ncat --keep-open --listen 0.0.0.0 5555 และ ก ncat <เซิร์ฟเวอร์ IP> 5555.

ชัดเจน && bpftrace -e '
#include "/usr/src/kernels/3.10.0-957.el7.x86_64/include/net/sock.h"
#include "/usr/src/kernels/3.10.0-957.el7.x86_64/include/net/tcp.h"
#include "/usr/src/kernels/3.10.0-957.el7.x86_64/include/net/ip.h"
#include "/usr/src/kernels/3.10.0-957.el7.x86_64/include/linux/skbuff.h"

// โมฆะคงที่ tcp_cleanup_rbuf (struct ถุงเท้า * sk, คัดลอก int)
// https://elixir.bootlin.com/linux/v4.9/source/net/ipv4/tcp.c#L1416
//
kprobe:tcp_cleanup_rbuf / com == "ncat" /
{
$sock = (struct ถุงเท้า *) arg0;
$skb = (struct sk_buff *) $sock->sk_receive_queue.next;
$queue = (struct sk_buff_head *)$sock->sk_receive_queue;

printf("%p \t", $คิว);
printf("%p \n", (struct sk_buff *) $sock->sk_receive_queue);
printf("%p \n", $queue->ถัดไป);
printf("%p \n", $queue->prev);
printf("%u %u\n", $queue->qlen, arg1);

ถ้า(1)
  {
  $iph = (struct iphdr *)($skb->head + $skb->network_header); // https://elixir.bootlin.com/linux/v4.9/source/include/uapi/linux/ip.h#L85
  $th = (struct tcphdr *)($skb->head + $skb->transport_header); // https://elixir.bootlin.com/linux/v4.9/source/include/uapi/linux/tcp.h#L24
  $proto = $iph->โปรโตคอล; // 6 - TCP 17 - UDP https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
  $ipv = $iph->เวอร์ชั่น; // 4 - IPv4 6 - IPv6
  $size = (($iph->tot_len >> 8) | (($iph->tot_len & 0xff) << 8)) - ($th->doff * 4) - ($iph->ihl * 4) ;

  printf("%s\t%u\t",
    การสื่อสาร,
    ปิด
    );

  printf("%s:%u\t>\t%s:%u\t%u\n",
    ntop($iph->saddr)
    (uint16)($th->แหล่งที่มา << 8) | ($th->ที่มา >> 8),
    ntop($iph->daddr)
    (uint16)($th->ปลายทาง << 8) | ($th->ปลายทาง >> 8),
    ขนาด $
    );
  }
}'

ถ้าใครรู้ว่าฉันทำอะไรผิดหรือฟังก์ชั่นที่ดีกว่าในการขอฉันจะขอบคุณมาก

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา