自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (3)
  • 收藏
  • 关注

原创 Openresty测试框架--Test::Nginx

Test::Nginx使用说明1. 简介1.1 组件介绍Test::Nginx是一个由Perl编写的nginx测试组件,继承自Test::Base。1.2 安装方法sudo cpan Test::Nginx1.3 测试目录结构测试目录最好命名为t,因为在测试过程中会在t中创建conf目录存储当前测试的配置和日志(默认路径为t/),应该可以提供参数来指定目录,尚未研究。cc_cac...

2019-08-25 00:40:01 3422

原创 Linux命令 --- date

date [OPTION]… [+FORMAT] 参数 -d –date= 格式化输出指定的时间,可以使用’20170601 11:11:11’的方式来作为参数,可以省去部分做简写 可以使用以下缩写:now, yesterday, last-day, tomorrow, next-day, next-month ‘30 days ago’

2017-09-20 18:31:13 305

原创 Linux命令 --- ps/pstack/pstree

pstack pstack pid 显示某个进程的栈跟踪,必须在对应的用户组或root下操作。[wuchunlai@s1 ~]$ sudo -u work pstack $(pgrep cc_engine)Thread 3 (Thread 0x7fb3467ff700 (LWP 6130)):#0 0x000000370cae5d03 in epoll_wait () from /li

2017-09-20 17:31:38 399

原创 【犯二记录】链表结点换位引发的思维僵化,太可怕,智商 == 0

今天由于业务需要,把之前写的链表结构改造成了双向链表,并添加了一些功能上去,在这其中某个功能需要对链表在插入时进行排序。为什么是插入的时候排序不是最后再排序呢,不是多次一举吗?其实这是根据我们的业务需求决定的,在这里数据某段时间内是集中在几个key上的,但是数据量又非常大,所以就很直接的选择了最简单的双向链表在每次插入的时候重新定位,其实类似于堆排序中的上升,每次找到需要改变的结点进行操作后,调用

2016-11-14 22:38:34 506

原创 Linux下各压缩方式测试(压缩率和使用时间)

压缩比及压缩速度测试:$ head -n 2000 cc_detail_201608.sql > 1$ time tar -c –lzma -f 1.glz 1 real 23m44.216s$ time tar -c –xz -f 1.gxz 1 real 25m26.296s$ time tar -czf 1.tgz 1 real 1m17.476s$ time tar

2016-09-20 18:50:52 17087

原创 Linux命令 --- 查找筛选grep

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用

2016-09-19 18:51:15 14370

原创 Linux命令 --- 文件比较diff/cmp

diff [options] 源文件 目标文件 按行比较两个文件,并显示两者的区别。 -i 忽略大小写 -b 不检查空格字符的不同 -B 不检查空白行 -c 显示文件全文并对不同进行标注 -w 忽略所有的空格 -p 当比较的是c代码时显示所在的函数 -q 仅显示有无差异 -r 比较子目录的文件 -T 在每行前面加tab以保持对齐 -y 以并列的方式显示两个文件的不同(-W指定宽

2016-09-01 17:58:35 1400

原创 Linux命令 --- 文件操作篇

mkdirmvcptouchchmodlscdrm9.

2016-08-22 23:43:00 315

原创 Linux命令 --- 登入登出篇

login [name][-p ][-h 主机名称] 在命令行系统里登录某个用户进行工作。 -p保持当前的环境参数 -h远程登录logout 与login相对,用户进行注销工作。 (ctrl+d可以作为快捷键)shutdown [OPTION]… TIME [MESSAGE] -r关机后重启 -h/H/P关机后待机或断电源 -c取消一个关机的指令(从pid删除),可以加解释说明

2016-08-09 11:54:39 6311

原创 总结一下自己常用的linux命令(实战or面试必备)

shutdownshutdown [-h][-i][-k][-m][-t]shutdown -time 30 // 30分钟后关机shutdown -h -time 30 // 关机后关掉电源(彻底关机)shutdown -h now // 立即关机并关闭电源 halt命令shutdown -k // 给其他用户发送关机预警2.

2016-03-21 16:19:06 474

原创 nginx源码初读(12)--跟main一起看流程(Block 1: 初始化基础模块 Block 2:获取参数)

在这一节终于可以开始看流程看机制了,还是小激动的,毕竟只看数据结构还是不懂。因为数据结构+算法+代码才能完整的理解nginx啊。前面11节我们总结了所有可能用到的基本数据结构,至于每个结构相应的方法,出了str其他没有过多讲述,后面看流程的时候遇到都会进行研究。我就直接分阶段贴代码了,一段一段慢慢的看。有一些内容对理解没什么用就直接…了,见谅。Block 1: 获取参数 —->>函数启动:main

2016-03-11 14:48:30 701

原创 nginx源码初读(11)--让烦恼从数据结构开始(ngx_command/ngx_module/ngx_conf)

第一点:ngx_command_t ngx_core_commands是nginx中的核心模块指令, 它的类型就是ngx_command_t。在每一个module的结构体中,也都有一个ngx_command_t。typedef struct ngx_command_s ngx_command_t;struct ngx_command_s { ngx_str_t

2016-03-10 15:24:31 1088

原创 nginx源码初读(10)--让烦恼从数据结构开始(ngx_cycle)

Nginx框架是围绕着ngx_cycle_t结构体来控制进程运行的。ngx_cycle_t结构体的prefix、conf_prefix、conf_file等字符串类型成员保存着Nginx配置文件的路径。Nginx在程序运行的时候会使用ngx_init_cycle方法来根据nginx.conf加载模块。ngx_cycle_t结构体定义:struct ngx_cycle_s { void

2016-03-04 15:47:35 434

原创 nginx源码初读(9)--让烦恼从数据结构开始(ngx_listening/ngx_connection)

在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件。利用nginx封装的connection,我们可以很方便的使用nginx来处理与连接相关的事情,比如,建立连接,发送与接受数据等。而nginx中的http请求的处理就是建立在connection之上的,所以nginx不仅可以作为一个web服务器,也可以作为邮件服务器。当然,利用nginx提供的con

2016-02-24 18:20:46 1845

原创 nginx源码初读(8)--让烦恼从数据结构开始(ngx_event)

nginx中的事件模块是一个很重要的模块,但这里作为初读,我们只简单看一下ngx_event的数据结构,至于模块和机制,留作之后再分析。下面是结构体ngx_event_t的代码:typedef struct ngx_event_s ngx_event_t;struct ngx_event_s { void *data; /* 事件上下文数据,通常data

2016-02-24 15:11:34 1718

原创 nginx源码初读(7)--让烦恼从数据结构开始(ngx_queue)

ngx_queue_t是nginx中的双向链表,我们看看它的数据结构,太简单:typedef struct ngx_queue_s ngx_queue_t;struct ngx_queue_s { ngx_queue_t *prev; ngx_queue_t *next;};是不是很简单?学过数据结构的我们一看就懂了。唉?等一下!等一下!等一下~~我老公呢~等一下。。(乱入,

2016-02-23 19:17:46 434

原创 nginx源码初读(6)--让烦恼从数据结构开始(ngx_list)

nginx自定的list跟我们常见的list是不太一样的,不同点就在于它的节点,它的节点不像我们常见的list的节点,只能存放一个元素,ngx_list_t的节点实际上是一个固定大小的数组。在初始化的时候,我们需要设定元素需要占用的空间大小,每个节点数组的容量大小。在添加元素到这个list里面的时候,会在最尾部的节点里的数组上添加元素,如果这个节点的数组存满了,再增加新的节点。我们看一下数据结构定义

2016-02-23 17:43:28 416

原创 nginx源码初读(5)--让烦恼从数据结构开始(ngx_array)

数组的结构体定义:typedef struct ngx_array_s ngx_array_t;struct ngx_array_s { void *elts; // 指向数组存储位置的首地址 ngx_uint_t nelts; // 当前数组中已经存放的元素个数 size_t size;

2016-02-23 16:41:42 681 1

原创 nginx源码初读(4)--让烦恼从数据结构开始(ngx_str)

nginx作者定义的ngx_str_t中,字符串并不是以传统c的’\0’结尾的,使用了长度len配合data来表示一个数据段。所以我们要尽量使用nginx自带的api进行操作,如果没有自带,那就自己写一个api来进行相关操作,而不要随便使用c自带的字符串处理函数,那样很可能会导致内存越界,而且从原则上来说,这是违规行为。看看ngx_str_t被定义成了什么:typedef struct {

2016-02-22 16:59:58 2791

原创 nginx源码初读(3)--让烦恼从数据结构开始(ngx_pool)

nginx_pool提供了一种资源管理机制(如内存,文件等),使得对资源的使用和释放统一进行,免除了资源释放的很多问题,开发者只需在需要内存时进行申请即可,不用过多考虑内存的释放等问题,大大提高了开发的效率。例如,在特定的生命周期统一建立内存池(如main函数系统启动初期即分配1024B大小的内存池),需要内存时统一分配内存池中的内存,在适当的时候释放内存池的内存(如关闭http链接时调用ngx_d

2016-02-22 12:26:49 587

原创 nginx源码初读(2)--让烦恼从数据结构开始(ngx_buf/ngx_chain)

chain和buf是nginx过滤模块涉及到的结构体,而pool则是管理内存分配的一个结构。在日常的过滤模块中,这两类结构使用非常频繁,所以nginx采用类似freelist重复利用的原则,将使用完毕的chain或者buf结构体,放置到一个固定的空闲链表里,以待下次使用。比如,在通用内存池结构体中,pool->chain变量里面就保存着释放的chain。而一般的buf结构体,没有模块间公用的空闲链表

2016-02-19 19:00:44 1044 1

原创 nginx源码初读(0)--学习nginx必看的网站

http://lxr.nginx.org/source就是这个网站,旁边有search功能,可以很方便的找到各种结构在哪里定义,在哪里引用使用过,从而更好的理解代码。配合vim+ctags,太方便啦

2016-02-19 14:44:36 1298

原创 nginx源码初读(1)--让烦恼从数据结构开始(ngx_cdecl/ngx_int/ngx_log)

抛去所有的模块和各种定义的数据结构,对于一个没看过这么大工程的小白来说,太乱!乱的不要不要,光是各种数据结构的含义,就让我要抓狂了。好吧,我并不是说它结构不好,相反我感觉代码写的太棒了。。就是一时间。。接受不了。废话不说了,让烦恼开始吧,唉╮(╯▽╰)╭第一点 :ngx_cdeclint ngx_cdecl main(int argc, char *const *argv);是的,就是这个ngx_c

2016-02-18 15:12:44 2406 1

原创 源代码查看工具:vim中ctags的使用(跳转查定义)

官方网站:http://ctags.sourceforge.net/ 下载后使用tar+configure+make+make install进行安装。$ tar -zxv -f ctags-5.8.tar.gz$ cd ctags-5.8$ ./configure$ make$ sudo make install使用前需要在源代码目录执行命令:$ ctags -R *参数的含义: -R

2016-02-18 14:44:09 3252

转载 intptr_t 类型

最近在看nginx源码,看到有一个类型intptr_t,没有见过,google了一下,有人说是指针类型,但是看nginx源码中对该类型变量的使用,好像不是指针类型。[cpp] view plain copystatic ngx_int_t 667 ngx_get_options(int argc, char *const *argv) 668 { 669 u_char

2016-02-18 11:38:10 1345

原创 Linux文件I/O(creat/open/read/write/lseek/close/dup/sync)

先来提一下文件标识符的概念,对内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数,打开或创建一个文件的时候,内核向进程返回它的描述符。我们要进行读写操作的时候,把这个描述符传给read和write即可对文件内容进行操作。 按照惯例,UNIX系统shell把文件描述符0与进程的标准输入关联,1和标准输出关联,2和标准错误关联。在unistd.h中有相关的STDIN_FILENO、

2016-02-03 14:27:12 1564

原创 Linux编程中的中断信号和一些标识(sig uid gid pid)

先上代码:#include <sys/wait.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>char *buf;// 自己定义一个中断的处理函数,在main中设定中断进入的条件,并且在中断中处理后事(free等等)退出程序static void sig_int(int signo){ // 在错误的时候输出当前

2016-02-02 15:13:07 477

原创 Linux编程中的出错处理

void perror(const char *msg);    // 输出msg指向的字符串,接上errno对应的出错消息,最后加上换行符(惯例把程序名作为msg)char *strerror(int errnum);          // 将errnum映射为一个消息字符串并返回

2016-02-02 11:04:06 319

原创 Linux输入输出重定向(编程:实现写入、展示cat和复制cp的功能)

就是简单的使用了read和write函数对标准输入输出文件进行读写,通过在运行程序的时候重定向实现许多功能,先上代码:#include <unistd.h>#include <stdio.h>#include <stdlib.h>#define BUFFSIZE 4096int main(void){ int n; char buf[BUFFSIZE]; while (

2016-02-01 17:06:51 2326

原创 Linux编程中目录内容的读取(实现ls功能)

dirent.h是POSIX.1标准定义的unix类目录操作的头文件,包含了许多UNIX系统服务的函数原型。头文件的位置在/usr/include/dirent.h,里面有很多函数定义和宏,可以提供给我们非常丰富的目录处理方法。我们在编程中一般只需要简单的使用下面几个函数。/* This is the data type of directory stream objects. The ac

2016-02-01 16:14:15 921

原创 抓包工具记录

1. wireshark:牛逼,但是体积太庞大,ddos攻击实验中没法有效的统计流量等2. 科来:不卡,可以在ddos中统计流量和简单的分析3. fastnetmon:linux和mac的git开源程序,使用git上提供的地址直接wget即可下载安装,但是本人太笨不会用,貌似公司里就是用这个实时检测攻击流量

2016-01-28 15:49:04 474

原创 Linux编程中的程序调用方法(附:自己来写个伪命令行?)

system系统调用:通过fork一个新的进程来执行参数中的命令,执行完毕返回阻塞的源程序 system("./test -a 3 -d");execv代替调用:通过把新的程序代替源程序继续运行新的程序,只有进程pid等固定值没有变,代码段数据段均被改变。在编程时如果要用execv,一定要加判断语句。详见底下的链接,讲的很详细 execv("./test");链接: System

2016-01-28 15:38:26 1532

原创 Linux程序设计中参数的解析

先上代码片,这是一个示例,通过函数循环读取我们的参数到optarg中,再通过一系列的格式化或者转换把相应的参数放在固定位置上。发现自己英语水平太差,所以试着写写英文的。 Let’s see the under code first, it’ss an example in which we read the opt to optarg for a loop and then through a

2016-01-28 15:21:33 395

原创 libev的安装

因为yum没法安装libev,我们首先在csdn的下载资源中找到libev的下载地址,我找的是http://download.csdn.net/detail/ncepubdtb/6513325#comment1.  tar -zxvf libev-4.15 解压2.  ./configure生成makefile文件3.  make4.  设置环境变量: vim /etc/pro

2015-12-27 16:43:24 4508

转载 HTTP GET的简单代码实现

大家好,这次的代码主要是从另外一位博主的博客上copy下来学习的,主要修改了其中有一点小问题的一段,其他地方略作修改,供大家交流学习。(在第一个函数中调用memset时使用了char *作为sizeof的参数,这里是不正确的,因为函数传参的时候是将数组转为指针传递的形参,sizeof大小是指针大小)原博地址:http://blog.csdn.net/wxhlinux/article/details/

2015-12-24 16:34:25 629

原创 第一篇,怎么增加SYN数据包的大小(syn flood攻击实验)

iphdr->tot_len总长度字段(16位)是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道 IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节总长度字段是IP首部中必要的内容,因为一些数据链路(如以太网)需要填充一些数据以达到最小长度。尽管以太网的最小帧长为46字节,但是IP数据可能会更短。如果没有总长度字

2015-12-22 12:22:41 6156

多线程自动化syn&udp flood攻击集成工具

http://download.csdn.net/detail/wuchunlai_2012/9372564 http://download.csdn.net/detail/wuchunlai_2012/9373247 这是我针对以前发出的两个工具做的一些优化和集成,增加了自动识别网卡mac等功能,优化了攻击时间的控制策略。如果大家只是学习用,建议下载以上的代码进行修改和自己编写。 备注:代码自己学习测试用得,有恶意攻击行为的后果自负 之后将发布集成cc攻击的3.0版本

2015-12-31

udp flood攻击【C源代码】

http://download.csdn.net/detail/wuchunlai_2012/9372564 这个udpFlood是从上面我写的那个synflood里改的,很简单,如果大家需要做两个攻击的话建议自己改一个就ok,也可以集成在一起。还能多练习,熟悉tcp和udp的区别

2015-12-23

多线程自动化SynFlood[Linux下源码]

这个代码的原版是从某个论坛上很多年前的帖子翻出来的,本人还不会熟练使用makefile,所以直接在他上面进行了开发。我也不知道很多文件有什么用,src文件夹中有代码,include中包含了头文件信息。 使用说明放在压缩包内的readme.txt,里面有详细的使用说明,我给他补充了很多功能,绝对好用,满足95%你的尝试欲望。更多功能待我有时间写好了上传,里面有我的联系方式,如果有问题请联系我。

2015-12-22

空空如也

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

TA关注的人

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