自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (4)
  • 收藏
  • 关注

原创 10行代码玩转弹性调度的小把戏

Linux的进程调度器是通用的调度器,无论是O(n)O(n)O(n),O(1)O(1)O(1),还是CFS,均是基于统一的指标来对待所有进程的。也就是说,进程甚至无法自主退让。只要确定了一个进程的优先级,无论是是什么调度算法,该进程的地位总是不会变化,如果能做到下面的策略就好了:系统中进程多了,就加速退让。系统中进程少了,就加速抢占。工人来了,就退让。经理来了,就抢占。…考虑一个进程A在一个特定的系统中运行,它最多只能用40%的CPU,此时,如果有另外的待运行进程,那么这些进程自然分摊另外

2020-08-29 11:24:47 4433 2

原创 缉拿隐藏进程以及隐藏CPU利用率的进程

前面我介绍过很多隐藏进程的把戏,随后我对每一种把戏有针对性的给出了反制措施,可以翻看我2020/03~2020/08的文章,太多了,不再一一列举。如今,我要介绍一种超级简单的手段,手艺人必备。无论你是隐藏了进程,还是隐藏了进程的CPU利用率,只要它在CPU上运行,在下面的脚本面前,任何隐藏手段终归徒劳:#!/usr/local/bin/stapglobal tbaseglobal tdeltaprobe scheduler.cpu_on{ a = gettimeofday_us() t

2020-08-26 23:04:38 3769 1

原创 systemtap引用自定义头文件的手艺精简版

先看上一篇:https://blog.csdn.net/dog250/article/details/108230157不够精简是不是?那是因为我的水平还不够6,其实stap是可以直接调用system来执行外部命令的,如此就不需要再进入guru模式来stap自己了。脚本如下:#!/usr/local/bin/stap// selftapprobe process("/usr/local/bin/stap").function("make_any_make_cmd"){ ext = "\'E

2020-08-26 22:22:31 8829

原创 systemtap引用自定义头文件的手艺

自从写第一个guru模式的stap脚本,我就再也不写内核模块了。stap简直太方便了,竟然可以将C语言当脚本语言来玩。随着我写的stap脚本越来越复杂,我需要使用一些半吊子设计模式来让代码更好看些,比如我不会再将所有东西写在一个stap脚本里,我会将一些公共的结构体定义,宏定义写在一个头文件里:// common.h#define VAR 100然后在我的stap脚本里引用它们就是了:#!/usr/local/bin/stap -g// aa.stp#!/usr/local/bin/stap

2020-08-25 23:41:48 9127 1

原创 揭穿恶作剧重建TCP连接和进程之间的关联

是时候将把戏揭穿了。请先阅读下文:https://blog.csdn.net/dog250/article/details/108113329依照文章中所描述的把戏,我们hack一下两个进程的tcp连接的归属,首先给出hack之前的情景:[root@localhost ~]# netstat -ntpActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Addres

2020-08-21 08:12:14 8813

原创 制造恶作剧切断TCP连接和进程之间的关联

想不想再玩个恶作剧??很多运维发现系统中有tcp连接异常的时候,会使用netstat/ss命令找出tcp连接对应的处理进程,然后去找研发debug这个进程。比如:[root@localhost ~]# netstat -ntpActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program namet

2020-08-20 21:53:09 10047 3

原创 卸载正在使用中的tcp_congestion_control模块

很久以前,我在开发一个TCP拥塞控制算法模块的时候,由于频繁快速迭代,常常需要将模块卸了再装,装了再卸,由于我更改的Linux的全局内核参数net.ipv4.tcp_congestion_control,我的ssh连接也是要使用同样的CC模块,这导致在我将默认算法切换到reno builtin算法后,必须将所有TCP连接全部断开后才能使得CC模块的引用计数降为0,从而顺利卸载。以bic为例,我将tcp_bic模块加载后,连入几个TCP连接:[root@localhost ~]# sysctl net.i

2020-08-19 00:18:40 10368 1

原创 一行代码隐藏Linux进程

总有朋友问隐藏Linux进程的方法,我说你想隐藏到什么程度,是大隐于内核,还是小隐于用户。网上通篇论述的无外乎hook掉procfs或者类似的用户态方案,也都难免长篇大论,我说,这些场面都太大了,太复杂了。对于希望马上看到效果的而言,看到这么一堆复杂的东西,大概率望而却步。本文介绍一种将Linux进程小隐于用户的非常规方法,仅仅一行代码:修改掉进程的pid即可。target->pid = 0x7fffffff;完整的脚本如下:#!/usr/bin/stap -g# hide.stp

2020-08-16 10:05:13 9134 5

原创 编写Linux crash工具插件扩展crash命令

当前时间,周五晚10点45分左右。我的需求是用crash工具dump出Netfilter的某个hook点所有hook所属模块的名字。我的方法如下,首先找到模块地址:crash px nf_hooks[2][0] =>varcrash list nf_hook_ops.list -s nf_hook_ops.owner -H $var |awk -F '=' '/owner/{print $2}'如此会得到一个列表,比如:0x12340x66780x86410x4570...显

2020-08-14 22:41:42 10353 1

原创 两行代码隐藏进程在top中的显示

今天到上海比较早,赶上了嘉泰线公交车,省了几十块钱打车钱,高兴!两行代码能干啥?能隐藏一个进程在top中的显示,却也只能隐藏一个进程在top中的显示。如果非要抬杠sar可以暴露,perf可以暴露,trace可以暴露…那显然没有get到我要说的点。我们来写一个循环消耗CPU的程序:int main(){ while (1) {}}然后运行它,随后top:top - 18:06:34 up 19:13, 4 users, load average: 0.22, 0.06, 0.06Ta

2020-08-14 22:36:06 9488 5

原创 午间的杂耍-本地替换Google的logo

debug kernel无解时分秒中的挫败感让我觉得必须来点所见即所得的东西了。我不懂前端技术,一点也不懂,对这种一点不会的东西,随便弄点什么就能有十足的成就感,网上搜点资料,来把Google的logo替换了怎么样,嗯,不错。我用的是Chrome,首先安装Tampermonkey插件:点击右上角的Tampermonkey插件图标,选择添加新脚本:然后在编辑区输入下面的脚本:// ==UserScript==// @name New Userscript// @namespa

2020-08-08 19:06:08 9597 2

原创 Linux系统load average异常值处理的trick

周末分享一个内核bug紧急热处理case。假如你发现某个Linux系统的load输出如下:#uptime... 0 users, load average: 32534565100.09, 31042979698.12, 21960303025.38你会觉得你的系统已经不堪重负了吗?uptime/top从/proc/loadavg取值。/proc/sched_debug可以观察实时负载。赶紧找出到底是哪些task把系统压的如此不堪。No!这明显是内核的bug!我们知道,Linu

2020-08-08 08:33:04 9428

原创 可以自己隐藏自己CPU利用率的Rootkit(附:Rootkit的root权限)

想不想让CPU利用率展示成一首优美的旋律,就像弹琴一样。我的意思是,你想让系统以及task的CPU利用率是多少它就是多少,一切都是由你的程序自己来 调制演奏。 这需要一种自指机制。哈哈,完全可以,本文来演示,或者说,你可以把本文的内容看作一个戏弄运维人员的恶作剧。运维人员经常会遇到各种CPU高的问题,然后成群结队地去排查,想让队伍更大些吗?想让事情更诡异吗?我让你查,我让你查。哈哈。事先声明,若用本文描述的手段实施恶意行为,将会受到谴责,这并不是一个真正工程师该有的行为,更有辱手艺人的探索精神。

2020-08-07 00:02:41 9612 10

原创 systemtap脚本实现的NAT端口转换

这会儿不是工作日,这会儿是周六。systemtap就是一个kprobe的DSL,本质上完成的是同一类工作,kprobe用起来比较麻烦,还要自己编写编译内核模块,相比而言,stap就方便很多。既然kprobe可以修改内核结构体的内容,那么也就可以修改网络数据包咯,前面的文章描述了如何迷惑程序员的抓包行为,本文展示一下如何实现一个NAT端口转换逻辑,代码如下:#!/usr/bin/stap -g%{#include <linux/tcp.h>#include <linux/i.

2020-08-01 10:44:01 8639

一个iptables的stateless NAT模块实现

如果你在寻找Linux上配置诸如Cisco设备上的static双向NAT的方法,这个或许就是你想要的; what?你觉得它完不成PAT?是的,它不行。但是想做PAT为何不使用现有的iptables实现呢?它可以自动为你解决元组唯一性问题。不要从概念上分析,事实上,static双向NAT是完全对称的,一对一的 ,也只有在BOX两边的网络在拓扑级别是完全对等的情形下,这种NAT或许才是有用的,Cisco设备经常处在这样的位置,比如一个很大的stub节点的出口位置,比如两个domain的中间位置... 我将名字取为STATIC-2-WAY-NAT,比较长也比较怪,完全不符合UNIX的小写短名传统,我的想法是:这样可以少写很多的帮助信息,因为名字就是自解释的。

2014-12-27

模块化的nf-HiPAC

原版的nf-hipac需要为内核打patch,且只支持较低版本的内核,构建起来相对比较麻烦。 模块化后的nf-hipac可以直接作为内核可加载模块编译,且适配了高版本的Linux内核。为了移植工作简化,去掉了和iptables模块的联动支持!

2014-11-21

配置文件还有一些other

代码和配置iptables配置文件,还有一些别的东西

2010-04-16

关于linux内核以及其他个人体会的文集

本文集是我用将近两年的时间写成的,大多数文章是关于linux内核的,另外还有一些我自己对计算机的理解,还有一些历史,音乐方面的东西。适合于对linux内核思想感兴趣的阅读,文章偏重于对于思想的理解。

2009-09-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除