systemtap追踪网络活动

tcp_v4_rcv.stp

%{#include <linux/tcp.h>
#include <linux/ip.h>
%}function print_skb_data:string(skb:long) {length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->lendata_length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->data_lenskb_data = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->dataheadlen = length - data_length /* skb_headlen() */return sprintf("%.*M", headlen, skb_data)
}function __buffer_data:string(skb:long, str:long)
{length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->lendata_length = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->data_lenskb_data = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->dataheadlen = length - data_length /* skb_headlen() */data = ""if (str) {data = kernel_buffer_quoted(skb_data, headlen)} else {data = sprintf("%.*M", headlen, skb_data)}return data
}function get_skb_ip:string(skb:long)
%{struct sk_buff *skb2;struct iphdr *iph;skb2 = (struct sk_buff *)(long)STAP_ARG_skb;iph = ip_hdr(skb2);snprintf(STAP_RETVALUE, MAXSTRINGLEN, "saddr:%d|daddr:%d", iph->saddr, iph->daddr);
%}function get_skb_port:string(skb:long)
%{struct sk_buff *skb2;struct tcphdr *th;int sp;int dp;skb2 = (struct sk_buff *)(long)STAP_ARG_skb;th = (struct tcphdr *)skb2->data;sp = ((th->source & 0xff00) >>8) | ((th->source & 0xff) << 8);dp = ((th->dest & 0xff00) >>8) | ((th->dest & 0xff) << 8);snprintf(STAP_RETVALUE, MAXSTRINGLEN, "sport:%d|dport:%d", sp, dp);
%}probe kernel.function("tcp_v4_rcv").call
{printf("--------------------------------------------------------\n");#print_backtrace();#printf("skb=%s\n",$skb$)#skb_data = @cast(skb, "struct sk_buff", "kernel<linux/skbuff.h>")->data;#printf("skb.data=%s\n", __buffer_data($skb,1));printf("pid=%d, exename=%s, [%s]-[%s], skb->data[%s]\n", pid(), execname(), get_skb_ip($skb), get_skb_port($skb), __buffer_data($skb,1));printf("--------------------------------------------------------\n");#exit();
}
# 执行该脚本
stap -v -g tcp_v4_rcv.stp
# 可以得到下面的输出
grep 9090 log3
pid=0, exename=swapper/0, [saddr:20555968|daddr:1681500352]-[sport:51949|dport:9090], skb->data["\312\355#\202\2370\035UV\021\270\u0380\030\b\ni\f\0\0\001\001\b\n\017\313\317\035\230\f\3401wohaixiangaita\n"]
pid=0, exename=swapper/0, [saddr:20555968|daddr:1681500352]-[sport:51949|dport:9090], skb->data["\312\355#\202\2370\035dV\021\270\u0380\030\b\n\260\205\0\0\001\001\b\n\017\313\336\u0298\017\f\220danshilizhizaichaojia\n"]
pid=0, exename=swapper/0, [saddr:20555968|daddr:1681500352]-[sport:51949|dport:9090], skb->data["\312\355#\202\2370\035zV\021\270\u0380\030\b\nO\253\0\0\001\001\b\n\017\313\351M\230\017\034zlinjujie\n"]

得到结论:

  1. 在tcp_v4_rcv被调用时skb->data存储的是tcp header + tcp body

分析某个函数耗时情况

# stap -x 7208 -v latency.stp 'kernel.function("tcp_sendmsg")' 36000global trace[64]
global etime[64]
global intervalsprobe $1.call   {if (pid() == target()) {trace[cpu()] ++;if (trace[cpu()] == 1) {etime[cpu()] = gettimeofday_ns()}}
}probe $1.return {if (pid() == target()) {trace[cpu()] --if (trace[cpu()] <= 0) {t1_ns = etime[cpu()]trace[cpu()] = 0etime[cpu()] = 0if (t1_ns == 0) {// maybe multi threads ?printf("Cpu %d was already in that function?\n", cpu());} else {val = (gettimeofday_ns() - t1_ns)/1000intervals <<< valif (val > 4000) printf("val %d ret %x\n", val, $return);}}}
}probe end {printf("Duration min:%dus avg:%dus max:%dus count:%d\n",@min(intervals), @avg(intervals), @max(intervals),@count(intervals))printf("Duration (us):\n")print(@hist_log(intervals));printf("\n")
}

参考文章

  • 手艺人舍bpftrace而取systemtap的代价和思考_dog250的博客-CSDN博客

  • systemtap脚本实现的NAT端口转换_dog250的博客-CSDN博客

使用systemtap追踪网络活动相关推荐

  1. 用大数据追踪网络诈骗

    "天下无贼"哪有那么容易,连"网上无贼"都还很远.根据安全中心的相关数据统计:2011年至2014年,各类网站泄漏的网民个人信息多达11.2亿条,内容包括姓名. ...

  2. macOS 上如何禁用 Adob​​e 后台进程,但保存 CPU、内存和网络活动呢

    adobe系列软件没有打开,但是进程中显示运行中,如何禁止这些进程运行,而不影响adobe系列软件使用呢?小编为大家带来了禁用 Adobe 后台进程,但保存 CPU.内存和网络活动教程,一起来看看吧! ...

  3. CISA要求联邦机构定期追踪网络资产和漏洞情况

     聚焦源代码安全,网罗国内外最新资讯! 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为 ...

  4. MacOS技巧:如何禁用 Adob​​e 后台进程,保存 CPU、内存和网络活动

    最近有很多小伙伴咨询小编,没有运行任何adobe app软件,但是进程中显示运行中,如何禁止运行这些进程,而不影响adobe系列软件使用呢?小编为大家整理了详细的教程,收藏起来吧! 禁用 Adobe ...

  5. linux mtr路由追踪,网络路由跟踪工具mtr

    今天开了二十多台vm云主机,并写了python3脚本批量重命名linux主机名,发现无法ssh登录!!! telnet 22端口直接断开. 然后下载了一款工具叫mtr进行路由跟踪,为什么用这款工具而不 ...

  6. 脸书重回通讯平台战争,为什么推播2.0这么重要?

    关键词:Facebook.SaleSmartly.SS客服 不知道什么是「定期通知」的朋友, 先来看看这篇 「定期通知」功能正式上线! 所有疑难杂症都看这! 那么今天这篇文章,SaleSmartly要 ...

  7. 网信办:网络音视频等平台不得诱导未成年人参与应援集资等活动

    3月14日消息,据国家网信办官网消息,今日,国家网信办就<未成年人网络保护条例(征求意见稿)>(以下简称<意见稿>)再次公开征求意见. <意见稿>在第五章" ...

  8. 闲人闲谈PS之二十四——着重聊聊网络和活动

    惯例闲话:南方海滨城市的冬天很暖和,但是,闲人还是习惯江浙冻成狗的气候,现在反而有点不适应,天气暖洋洋,人也变得懒洋洋-总之,最近效率还是略低,很多想动动笔,很快被温暖的阳光给忽悠过去了--拖延症和温 ...

  9. 用于活动检测的上下文多尺度区域卷积三维网络

    摘要 活动检测是计算机视觉中的一个基本问题.检测不同时间尺度的活动尤其具有挑战性.本文提出了一种用于活动检测的上下文多尺度区域卷积三维网络(Cmsrc3d).为了处理活动实例固有的时间尺度变异性,采用 ...

最新文章

  1. Cocos 发射和监听事件 事件派送(TypeScript)
  2. 为什么他们能做成功?关于创业的几点感想
  3. python文件下载器代码_GitHub - applechi/pythonCollection: python代码集合(文件下载器、pdf合并、极客时间专栏下载、掘金小册下载、新浪微博爬虫等)...
  4. NSTimeInterval和CMTime
  5. 后台接收数组_微信小程序如何与后台api接口进行数据交互(微信报修小程序源码讲解七)...
  6. map的详解及常见面试题
  7. centos6.5配置Hadoop环境,运行wordcount例子
  8. php的qq接口文档,分账接口
  9. 组合式应用新利器?SaaS新时代事件网格如何解决集成标准化问题
  10. cuSPARSE库:(十三)cusparseDestroySolveAnalysisInfo()
  11. 随想录(docker应用)
  12. latex ref引用章节号
  13. Linux下Python的安装以及注意事项
  14. 360浏览器html5无法播放,win7系统360浏览器播放不了视频的解决方法
  15. C++数据库编程简介
  16. php循环语句时间戳转换,php怎么实现时间戳转换为时间
  17. 【Unity3D】基于模板测试和顶点膨胀的描边方法
  18. 企业邮箱登录地址,邮箱登录入口,邮箱登录须知
  19. 卖shell看站什么意思_seo里的shell是什么意思
  20. cadence iscape如何下载文件?

热门文章

  1. 使迅雷超速的六个超级技巧
  2. 迪杰斯特拉算法-(.c)
  3. 西邮Linux小组2019-2021面试试题二三事
  4. 统计虚词使用不同聚类方法判别红楼梦作者
  5. ipscan端口扫描工具
  6. Xcode写Python
  7. linux怎么执行arc文件,arc文件扩展名,arc文件怎么打开?
  8. 数据可视化知识点汇总
  9. windows 安装php_如何在Windows上安装PHP
  10. 面试中软件开发测试题--Java自学网