12 dog250

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 7

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

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

2020-08-08 19:06:08

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

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

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

2020-08-07 00:02:41

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

systemtap迷惑别人抓包,修改或者损坏数据包

一般遇到莫名其妙的网络问题时,第一反应就是抓包分析,然而抓取的数据包真的可信吗?抓包会不会帮倒忙,让事情更加微妙从而火上浇油呢?我让你抓,抓个毛线啊!完全正确,只要做一点手脚即可,这次我用systemtap。我希望的效果是,只要你抓包,显示的都是127.0.0.1到本机的包,哈哈,无论怎样都是这种数据包,从而迷惑程序员的判断。stap的脚本代码如下:#! /usr/bin/stap -g%{#include <linux/if_ether.h>#include <linu

2020-07-30 23:47:18

ncurses实现一个会滚动的圆圈

我一直想知道sl蒸汽机小火车是怎么做的,我惊奇于它那烟囱里冒出的炫酷的烟,以及车轮的滚动:于是我想自己试一试,我就做一个滚动的圆就不错了,也不奢望能有什么好看的效果,就类似下面的样子(我故意usleep(500000);调了慢速):12个字母在一个圆上轮转,以展示滚动的效果,我这些是完全算出来的:一个list_head双链表模拟圆周的点。二维平面逐行扫描顺序转换为圆周顺序。每次删除表头插入表尾以模拟转动。遍历链表展示效果。我的代码非常简单,如下所示:#include <ncur

2020-07-28 23:11:03

用netcat,SSH构建IP层Tunnel

【关于题外话在最后】写作本文主要基于两点,首先是因为我前段时间写了几篇关于XXN的新解,收到了很多的邮件反馈,我也思考了很多,另一个方面是因为很多人问我怎么用QQ,P2P搭建一个IP层的Tunnel,我的回答是“我也不知道”。我确实不知道,根本就没有试过,只是有个这样那样的想法…我主要是没有动力和能力去Hack这些非Linux上的东西…所以说,我写这篇文章,用UNIX的方法 “将多个小工具结合起来” 实现我的那些没有实现的想法,抛砖引玉一下。声明:本文没有技术含量,甚至不会有什么代码,本文只是一些Li

2020-07-28 18:04:21

合并N个有序链表与FQ公平调度

下大雨了,于是就想表达一些只有下雨才能表达的东西。夜半酒酣惊觉起,使我流泪忆江南…前天晚上下班带着小小在暴雨中狂奔,非常舒服,其实也算是流言终结者吧。反驳一下几千年来在我国北方通过长辈代代相传的淋雨和感冒之间的因果关系。  昨天早上很早起来,听雨作文,今天早上继续,文章不算太长。合并两个有序链表这是一道超级常见的课后作业题或者面试题,网上答案一搜一箩筐,我自己也写了一个不会编程版: ...

2018-05-09 06:11:55

Linux FQ 队列实现原理浅析

又到了周六早上,依然是后半夜属于自己的时间。起床,读了几篇古文,准备梳理一下Linux FQ和RPS方面的原理,正好昨天也有人问到我。本文先从FQ开始。enqueue入队过程上一张图: 详细描述了fq队列的入队过程,其中着重理解几个数据结构:sock作为键的红黑树:用于关联skb和flownext_time作为键的红黑树:用于保存未来被调度的flow,并决定timer唤醒时间...

2018-04-21 06:13:28

80行C代码实现ncurses版贪吃蛇!

事情是这样的,周末我在家打开电脑排查现网问题,安德森先生对这个电脑非常感兴趣,凑过来非要看看,我给他演示了sl小火车。小小和疯子也都在旁边看着。我说这个sl小火车是一个现成的程序,然后就被小小和疯子鄙视了,她们以为这个小火车是我自己做的…搞了半天是下载的现成的东西…我觉得我得自己做点可以玩的小东西,哪怕再简单的,只要看起来像回事就行,以挽回面子。还是贪吃蛇最简单,这个东西以前我写过不止一版了:https://blog.csdn.net/dog250/article/details/5303351h

2020-07-27 22:22:12

实例演示如何在公共互联网构建overlay实现SDWAN

overlay网络并不是什么高端的技术,我们使用了几十年的互联网本身就是一张层叠的overlay网络,列举下面的点对点聊天网络:4个用户点对点聊天,它们并未意识到底层IP传输网络的存在,在它们看来,彼此之间是直连的,如蓝色虚线所示,4个用户连接成了一张full mesh网络。如果能构建上述结构的实例,那么实现SDWAN就是一件很简单的事了,而实现一个点对点聊天程序程序早在2006年就是一个大专(注意,是大专)毕业设计被选烂了的课题,这意味着它并不困难。我简单写了一个聊天程序代码:https://g

2020-07-24 17:20:54

假期跟我一起写一个点对点overlay-SimpleUOM详解

自从上周写了几篇关于BadVPN的文章后,收到很多的邮件前来询问细节。其中最多的不外乎两类,一类是询问怎么使用的,另一类则是要求我写几篇源码分析。先来一个一个说。1.关于BadVPN的使用问题和OpenVPN相反,BadVPN几乎没有除了配置隧道之外的任何东西,这些被排除了内容中最重要的应该就是路由了。OpenVPN中就有关于路由的很多配置,还可以从服务端往客户端推送路由,这简直太方便了,但同时也

2017-04-29 10:40:35

真实网络中间链路对端到端的影响

分层的网络模型是一个理想的模型,但现实从来就没有理想过。在理想模型中,IP地址和传输层TCP/UDP都是端到端的,中间路由器根据目标IP地址逐跳将数据包送达目的地。但在现实中,我们会面临:出口NAT。状态防火墙。Anycast/ECMP。设备GRO/LRO。IPv4在面临处理上述问题时会遭遇很多疑难杂症,比方说,NAT机制会关联应用层协议,比如FTP,这意味着NAT需要修改协议载荷,这需要IP分片在NAT设备完成重组而不是目的地。状态防火墙需要保存流Session,流Session往

2020-07-19 10:45:34

C语言未初始化的局部变量是多少?

C语言中,未初始化的局部变量到底是多少?答案往往是:与编译器有关。可能但不保证初始化为0。未确定。总之,全部都是些一本正经的形而上答案,这很令人讨厌。但凡一些人给你滔滔不绝地扯编译器,C库,处理器体系结构却给不出一个实际场景复现问题的时候,这人大概率在扯淡。又是周五回家时,大巴车上作短文一篇。其实,这个问题本身就是错误的问法,说全了能讲10万字,我们只要能在特定场景下确定其特定行为就OK了,当然,这就需要设计一个比较OK的实验。在演示一个实际代码行为之前,先给出一个知识, CPU不

2020-07-17 17:41:15

如何用二叉树改造cBPF程序提高BPF执行效率

在前一篇文章里,我描述了tcpdump的内置BPF程序处理非常多的匹配项时是何等的不堪:https://blog.csdn.net/dog250/article/details/107367725文中我列举了实验的过程和结果,最后我给出了建议, 预处理BPF程序,采用相对高效的匹配方式替换遍历式匹配。 然后写了些形而上的吐槽,文章就结束了。记得在很早以前我在优化iptables规则以及路由查找的时候,就提出过类似的思路,即 预处理规则集 。但从始至终都没能看到一行代码,看起来相当得有破无立。但这是一个

2020-07-16 23:03:56

从tcpdump看cBPF/eBPF程序设计

It’s a pleasure to pour cold water on the revellers, and you’ll thank me.我在2016年写过一篇关于tcpdump对Linux网络协议栈性能影响的文章:https://blog.csdn.net/dog250/article/details/52502623大概的结论是 当skb的字段匹配项的filter数量非常大的时候,BPF过滤程序将严重影响收包性能。当时我并没有展开说,部分原因是当时BPF尚未得到普遍关注,所以在就事论事之

2020-07-15 22:47:59

Linux网络数据转发平面的变迁-从内核协议栈到DPDK/XDP

昨晚读了一篇Paper:https://penberg.org/parakernel-hotos19.pdf大意是说,随着IO设备的进化,它们的存取/传输速率已经超过了CPU到内存的存储/传输速率,再也不再是慢速 外设 了,所以,对这些快速设备的管理和操作要发生改变才能适应,从这个意义上讲,几乎一成不变的Linux kernel在很多方面确实阻滞了性能的优化。这可能是现如今人们纷纷转向DPDK/netmap或者XDP的本质原因了。怎么说呢?周末回上海前,发一篇感想。在人们的印象中,一台标准的计算机包

2020-07-10 17:06:53

从SO_REUSEPORT服务器的一个弊端看多队列服务模型

在进入关于REUSEPORT的讨论之前,先看一张图,下图描述了单队列服务和多队列服务的区别:单队列典型实例:银行业务叫号,机场火车站出排队坐租车等。多队列典型实例:超市排队结账,医院挂号收费等。到底哪一种好呢?很多人估计会想当然选择多队列,但我个人更倾向于单队列。在计算机领域,人们似乎总是倾向于并行化,这背后似乎有着对同步锁的笃恨,比方说,只要你把一个数据结构设计成单链表,那么肯定会有一大堆人跳出来说你这个在多线程环境会很大的锁开销。当多线程操作同一数据结构时,饱受诟病的就是它的同步开销。

2020-07-09 22:00:24

cBPF/eBPF如何处理reuseport的吐槽和示例

我想用eBPF或者至少cBPF实现一个功能:根据来源和目标IP地址来选择同一个reuseport组的socket。比方说,我的服务器上有4个IP地址分别是10.0.0.1,10.0.0.2,10.0.0.3,10.0.0.4,我的服务侦听0.0.0.0:1234,分别有4个reuseport socket提供,我希望的select算法是:访问10.0.0.1的分派给sk1。访问10.0.0.2的分派给sk2。访问10.0.0.3的分派给sk3。访问10.0.0.4的分派给sk4。不要

2020-07-08 23:23:24

UDP的epoll并发框架-UDP Listener解决OpenUOM的并发问题

UDP具有是一种很好的封装协议,比如OpenVPN使用UDP封装会比TCP好很多,现在越来越多的业务采用UDP传输,然后自己定义按序到达以及流控逻辑,然而就我个人的使用经验来看,UDP太难做并发,大多数情况下,使用UDP会让epoll等高性能event机制优势全无。本文以OpenVPN为例,说明一下我是怎么解决UDP并发问题的。异步并发模型与epoll和apache相比,nginx采用异步的处理方

2016-01-21 20:53:23

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024超级勋章
    1024超级勋章
    授予原创文章总数达到1024篇的博主,感谢你对CSDN社区的贡献,CSDN与你一起成长。
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力计划专属勋章
    原力计划专属勋章
    2019年《原力计划【第一季】》专属勋章,现已经开启第二季活动啦,小伙伴们快去参加吧
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 原力探索 · S
    原力探索 · S
    在《原力计划【第二季】》打卡挑战活动中,发布 12 篇原创文章参与活动的博主,即可获得此勋章。(本次活动结束后统一统计发放)
  • 分享小兵
    分享小兵
    成功上传3个资源即可获取