Điểm:0

bpftrace: Đang cố lấy IP và cổng trên tcp_cleanup_rbuf()

lá cờ jp

Tôi đã kết nối tcp_cleanup_rbuf() và tôi đang cố lấy thông tin cổng và IP ra khỏi hàng đợi skb. Nhưng nó có vẻ trống rỗng. Đúng không? Nó đã được miễn phí vào thời điểm đó chưa?

Đây là tập lệnh shell mà tôi đang thử nghiệm. Sửa đường dẫn đến thư mục nguồn hạt nhân của riêng bạn, chạy nó và cũng chạy một ncat --keep-open --listen 0.0.0.0 5555 và một ncat <máy chủ IP> 5555.

xóa && 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"

// static void tcp_cleanup_rbuf(struct sock *sk, int đã sao chép)
// https://elixir.bootlin.com/linux/v4.9/source/net/ipv4/tcp.c#L1416
//
kprobe:tcp_cleanup_rbuf / comm == "ncat" /
{
$sock = (struct sock *) arg0;
$skb = (struct sk_buff *) $sock->sk_receive_queue.next;
$queue = (struct sk_buff_head *)$sock->sk_receive_queue;

printf("%p \t", $queue);
printf("%p \n", (struct sk_buff *) $sock->sk_receive_queue);
printf("%p \n", $queue->next);
printf("%p \n", $queue->prev);
printf("%u %u\n", $queue->qlen, arg1);

nếu(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->giao thức; // 6 - TCP 17 - UDP https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
  $ipv = $iph->phiên bản; // 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",
    liên lạc,
    pid
    );

  printf("%s:%u\t>\t%s:%u\t%u\n",
    ntop($iph->saddr),
    (uint16)($th->nguồn << 8) | ($th->nguồn >> 8),
    ntop($iph->daddr),
    (uint16)($th->dest << 8) | ($th->dest >> 8),
    kích thước $
    );
  }
}'

Nếu có ai biết liệu tôi có làm gì sai hay có chức năng nào tốt hơn để hook hay không, tôi sẽ rất cảm kích.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.