自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OpenUOM++多处理之-最新架构

好久没有更新这个系列了,因为我之前也说过,前段时间实在太忙了,而且早在一个月前就预示着本月将更加忙!事实也确实如此!终于在国庆前夕完成了既定的计划,心里也终于可以长出一口气了。最近在忙什么呢?其实就是OpenVPN!既然OpenVPN-ng已经不在计划内,那么让OpenVPN支持多处理就是必然要做的了。 还记得下面这张图吗?我暂且叫它版本1:起初,我一直以为画完这幅图就已经证明自己对O

2020-06-30 16:54:29 6283

原创 用scapy构建假的TCP隧道提高传输性能

TCP一定要是TCP吗? 它可能是个trick!豪雨滂沱,作文一篇,当笑话看看就好。前几天写了两篇与本文相关的随笔:https://blog.csdn.net/dog250/article/details/106881244https://blog.csdn.net/dog250/article/details/106955747想让数据包按照TCP的样子被传输和被处理,非常复杂。然而,TCP是一个端到端有状态协议,这意味着中间转发设备没有能力处理TCP的细节,如果在端系统也不需要处理TCP细

2020-06-29 22:33:50 11013 2

原创 到底要不要走TCP隧道,要不要TCP over TCP?

还是这篇文章:http://sites.inka.de/sites/bigred/devel/tcp-tcp.html有100个理由说TCP在某种场景下不好,就有100个理由说TCP在同样的场景了好的不得了,这就好像面对中医或者传统武术一样, 古老陈旧的东西总是被拿来被吹捧或者被打压。 TCP是个30年前陈旧的协议,在计算机网络的编年史中,TCP是一个古代的协议。TCP在长距离传输时窗口打开太慢;TCP对丢包无法预测;TCP对RTT测不准;TCP对网络拥塞事件反应迟钝;…这是一个保守的协

2020-06-25 19:44:21 4524 1

原创 大型互联网公司如何自建拥有独立AS号的IP网络

上周写了一篇关于CDN加速的文章:https://blog.csdn.net/dog250/article/details/106867424这篇文章还是没有说清楚一些事实,比方说,互联网公司的网络到底是什么样子的,虚拟连接到底是什么,这些东西到底如何粘合在一起。所以就不得不再简单写几句。声明在前:本文仅仅是一篇漫谈,当科普很好,它不是文档。本文不会涉及OTN等概念,转发设备不区分三层和二层。本文网络拓扑,网络行为无特指,运营商名称系化名。现在,我们从最初最简单的情况开始。互联网刚刚开始

2020-06-24 17:24:34 8226 2

原创 用伪造的TCP协议头花式欺骗核心转发设备?

如果你看OpenVxx的manual,里面有个链接:http://sites.inka.de/sites/bigred/devel/tcp-tcp.html我研究这个问题研究了好几年,从2013年就开始了,后来我烦了,于是见人就跟人说, 用UDP隧道,不要用TCP隧道,不然重传叠加会让连接崩溃!!那些年,我还是术业不精,难免要照本宣科,扯些什么TCP就是按序接收,重传保序之类云云。我太老实了。如若我想构建隧道,比如CDN动态加速的隧道,我肯定是要用这隧道去运输一些别的东西,换句话说, 这隧道肯定不

2020-06-21 08:48:59 3702

原创 当数据中心成为数据中转节点(漫谈CDN的加速)

先引用自己的两篇文章:流水线式的TCP中继代理是如何提高吞吐的 :https://blog.csdn.net/dog250/article/details/83997773eBPF/sockmap实现socket转发offload :https://blog.csdn.net/dog250/article/details/103629054TCP是一个对长距离大带宽(长肥管道)传输很不友好的端到端协议,它既保证不了效率(对丢包很敏感),又保证不了公平性(对时延很不敏感),它只是一个 收敛于刚刚可用 的

2020-06-20 21:25:39 5266 2

原创 Linux bridge模块的一次重构(让bridge归bridge让eth0归eth0)

勾起了回忆,就想记录点什么。再看刘经理的需求:被bonding的eth0可以独立工作,eth0作为类似带内管理接口。当然,现在看来,用macvlan实现这个非常容易:ip link add link eth0 man0 type macvlanbrctl addbr br0brctl addif br0 man0brctl addif br0 eth1ifconfig br0 1.1.1.1/8 upifconfig man0 4.4.4.4/8 upOK,现在经理可以通过eth0

2020-06-19 17:41:22 3478 3

原创 Linux bonding网卡与其slave共同使用

在昨天的一文中,我吐槽了Linux各种虚拟网卡设计的不完备,也只是吐槽,其实我并没有别的意思,我也懒得去做一些hack型的配置去规避这些不完备,我只是吐槽而已。昨晚,有网友要求我给出一些解法,因为他也遇到了这个问题:他希望被bonding的eth0可以独立工作,是的,作为管理口。于是,这位朋友要求我给出一个解法,我意识到这个需求的普遍性,而且不是每个人都想去配置什么macvlan,ipvlan的,于是,我就想再写点。在我的环境中:enp0s9被bonding到bond0。我希望bond0处

2020-06-17 11:07:10 11378

原创 Linux各种虚拟网卡master/slave的叠加使用

很多年前的一个夏日炎热的夜晚,我在一家银行16摄氏度的机房蹲了2小时编写一个功能:eth0被bridge到br0,br0跑转发流量,eth0跑管理流量。这个问题并没有想象的那么简单,不信你去试一下。一般而言,当eth0被bridge或者被bonding了之后,它就成了slave,对外就不可见了。但是这真的很合理吗?根本就不合理。网卡就是一个转发设备,哪来的业务逻辑?Linux虽然实现了bridge,bonding,veth,vlan,macvlan,ipvlan,tun/tap等虚拟网卡,但不

2020-06-16 17:32:12 5742

原创 探测C库malloc元数据捕获野指针

暴雨天,写着玩。野指针是令人讨厌的,很容易导致莫名其妙的踩内存错误,那么如何判断一个指针是不是野指针呢?一般而言,用户使用的内存在MMAP_THRESHOLD(一般为128k)两边,分别由malloc和mmap管理:malloc:C库的内存管理机制,一般用于小块内存管理。mmap:操作系统提供的内存管理机制,一般用于大块内存管理。这里不谈mmap,因为操作系统提供的机制太容易检测了。难的是C库的机制:内存在操作系统管理之外,完全自治,无法享受操作系统的段错误提示……只好通过C库mal

2020-06-16 11:45:50 9776

原创 当心你的终端输入缓冲区里遗留的炸弹!

来看一个程序:#include <stdio.h>int main (int argc, char **argv){ char buf[1]; //syscall(0, 0, buffer, 1); read(0, buf, sizeof(buf)); printf("buf is: %s\n", buf); return 0;}我这里不谈什么缓冲区溢出,也和各种漏洞无关,我这里说的仅仅是一个操作习惯,或者说编程习惯问题。问题,输入abc会发生什么?看看答案:[r

2020-06-13 10:06:41 6928 1

原创 Linux内核jump label与static key的原理与示例

jump label机制进入Linux内核已经很多很多年了,它的目的是 消除分支。 为了达到这个目的,jump label的手段是 修改分支处的代码。~把代码当做数据,代码和数据在冯诺伊曼计算机中得到了统一~本质上,jump label作用于下面的逻辑:var = false;...if var do_trueelse do_false静态拆分成了下面的两个逻辑,其一是:jmp l_truedo_falseretl_true: do_true或者,其二是:nopdo_f

2020-06-12 17:41:39 4615

原创 Linux用户态进程监控内存写排查踩内存

高铁北京回杭州的路上,想到一个简单的话题。在一个复杂的程序中,发生踩内存是一件非常恶心的事情,很难通过什么线索直到谁在哪个函数中往哪个地址写了什么,比方说数组越界写什么的。去年,我曾经长篇大论了一篇:https://blog.csdn.net/dog250/article/details/90690292现在看来,我又忍不住怼一波了…那篇文章里的方法纯粹就是为了炫技,搞什么又是纯汇编又是内联汇编,简直太复杂了。本文给出一个清新版的,试试看下面的代码:// mem_monitor.c#inclu

2020-06-10 17:28:59 10078 9

原创 从一道初等几何题目聊聊作为工具的数学

作为一个在杭州的流民,每周末才能回家,早上例行家务,做完后例行刷10分钟手机,在朋友圈看到一个有意思的几何题,原题如下:哈哈,这正是我的菜,一直都是,遂放下手机,拿了几张打印纸,开始比划。这等题目背后一定暗藏着某种奇技淫巧,必须作出辅助线才能真相大白,我先后尝试了:过C做CG平行于AB…在AD上截取一点G,使得AG=AB,则三角形AGC等边……过A作AG交DC于G,使得角BAG=60度…其中最后一个奏效:很容易证明△ABG\triangle ABG△ABG等边,由于AC=AGAC=A

2020-06-06 16:52:03 4117

原创 Linux系统演示更优雅的return probe示例程序

我演示了Linux系统中return probe的原理并给出了一个相当简单的示例程序:https://blog.csdn.net/dog250/article/details/106547963在文章最后,我提到全文描述的方法竟然是不优雅的,并且给出了优雅的机制应该是:我无意去做冗长且毫无意义的Linux内核源码分析,这真的毫无意义,如果你面对别的操作系统怎么办?但如果你理解了上面的图示,任何操作系统下,你都能得到一样的效果,至少基于x86_64/ARM体系结构的所有操作系统,你都能搞得定。回头有

2020-06-05 16:03:03 4632

原创 Linux系统调试之return probe原理和示例

前面谈了kprobe的原理,其实uprobe也差不多:https://blog.csdn.net/dog250/article/details/106520658那么return probe如何实现呢?我们知道,hook一个函数的起始位置非常容易,拿函数名当指针,直接修改成0xcc或者别的什么call/jmp即可,而hook一个函数的结束就没有这么简单了:函数大小不容易计算。函数可以在任意位置调用return。怎么办呢?很简单,只要执行流到了函数里面,直接取RSP寄存器指示的地址即可,它就

2020-06-04 19:54:25 5531 1

原创 int3和SingleStep联合实现Linux系统键盘监控(kprobe原理)

就着Linux系统键盘监控这个话题,再写点什么。前面已经写了三篇,可以一起汇总着看,算是一个简单的一题多解吧:标准inline hook的方法:https://blog.csdn.net/dog250/article/details/106425811手工push/ret jmp inline hook的方法:https://blog.csdn.net/dog250/article/details/106481123手工构造push %rbp效果的方法:https://blog.csdn.n

2020-06-03 20:41:24 10030

原创 x86_64平台SingleStep单步调试原理和示例

先看一个程序:// simple.cint value = 0;int main(int argc, char **argv){ value ++; value ++; value ++; value ++; value ++; value ++;}现在想单步调试它,跟踪value的变化,如何来做?用gdb即可。但是如果想要理解背后发生了什么,还是要手工来一遍效果才更佳。这就需要理解单步跟踪的本质(Linux为例):x86_64体系结构,FLAGS寄存器有一个TF标志位来使

2020-06-03 19:28:44 4577

原创 面向效果处理int3实时监控Linux系统键盘输入

前文手工处理了int3中断,实现了监控Linux系统键盘输入的效果:https://blog.csdn.net/dog250/article/details/106481123但是还是太复杂了。在这篇文章中,我深深地知道, int3替换了原来的单字节指令push %rbp,所以int3的处理中要想办法恢复原始指令执行。于是,我在int3的处理中改变了RIP,将执行流拉入了一个stub函数,执行完push %rbp之后,再return回原始路径。这无可厚非,但是不雅。不就是一条push %rbp指令

2020-06-02 20:06:01 15992

原创 手工处理int3实时监控Linux系统键盘输入

上周写了一篇Linux系统监控键盘输入的文字:https://blog.csdn.net/dog250/article/details/106425811事后想了下,能不能不用标准的5字节32位相对地址跳转实现inline hook,换一种方法实现呢?嗯,换int3实现!stap就是int3实现的,但是那毕竟是现成的工具,我需要一种手艺人的方法。我们知道,n_tty_receive_char函数实属有符号的inline,它并非FTRACE NOP开头的标准函数,所以本来就很难用5字节替换来inli

2020-06-01 20:55:51 16385

一个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关注的人

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