对网络传输 ”突然中断“的一次分析

 

目前是直接使用systemp 工具 检查ip_output部分逻辑:简写代码如下所示

#! /usr/bin/env stap
%{
#include <linux/in.h>
#include <linux/inet.h>
#include <net/inet_sock.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/highmem.h>
#include <linux/slab.h>

#include <linux/socket.h>
#include <linux/sockios.h>
#include <linux/in.h>
%}

function get_sock_tproxy:long(sock:long)
{
    sk = sock;
    val = @cast(sk, "inet_sock")->transparent;

    return val;
}

probe kernel.function("ip_finish_output2@net/ipv4/ip_output.c:282"){
    tmpsk = $skb->sk;
    val = get_sock_tproxy(tmpsk)
    printf("%6d %16s %6d 0X%6x %16s -> %s  tarnsp:%d \n", uid(), execname(), pid(),
           tmpsk->sk_protocol, inet_get_ip_source(tmpsk), probefunc(), val)
#printf("dump stack: %s\n", print_backtrace())
}

编译方式:

stap -v -r /home/public/linux-4.4.131/ -a arm64 -B CROSS_COMPILE=aarch64-linux-gnu- -g -p 4 -m ip_out_fin.ko ./share/systemtap/examples/network/ip_finish_output2.stp

根据其skb相关值判断出问题

由于涉及公司相关信息 就简单的写一写了! 此文章只是为了展示处理问题的相关方法技巧

关于使用systemp hack malloc 以及free 晚点加上

 test

posted @ 2021-07-19 22:14  codestacklinuxer  阅读(109)  评论(0编辑  收藏  举报