Posts by Year

2018

GOLB负载均衡器

少于 1 分钟读完

实现了负载均衡器的常用功能: 一致哈希、RoundRobin、SSL卸载、服务发现、启动/停止/增加/删除VirtualServer的REST API

斗地主引擎

3 分钟读完

通过枚举37种细分牌型,制作一个花色无关、顺序无关的字典,字典规模大小是34152,能够在O(1)时间内判断出牌是否有效、比较大小

重构引发的思考

少于 1 分钟读完

重构不见得是一个技术成长的好方法,只代表了你的当前水平

2016

Django开发技巧

1 分钟读完

针对常见问题,介绍一些实用的Django开发技巧

Django Newbie Q&A

少于 1 分钟读完

1.建议 建议新手先看完一本django开发入门书籍,熟悉manage.py -h常用命令!

2015

Netlink 基于事件的信号机制

4 分钟读完

Event-based signaling mechanisms: they allow to deliver events so that user-space processes do not have to poll for data to make sure that have up-to-date...

Netlink 监听 XFRM 状态消息

4 分钟读完

XFRM是 Linux 2.6 内核为安全处理引入的一个可扩展功能框架,用来在数据包经过路由路径的过程中对其进行修改,包含 3 种数据结构:策略(xfrm policy),模板(template)和状态(xfrm state)。策略是通过模板和状态发生联系的。 ——http://goo.gl/ek9dJM

Netlink分层模型及消息格式

2 分钟读完

通过libnl能够很快的编写一个netlink程序框架,隐藏了socket,bind,send/recv等复杂调用, 但是数据的构造和解析还是很头疼的,尤其对于我这样的初学者来说,下面按TCP/IP分层模型来学学Netlink消息格式。

libnl从内核获取taskstats信息

2 分钟读完

Taskstats is a netlink-based interface for sending per-task and per-process statistics from the kernel to userspace. –https://goo.gl/aTdgpp

Trusted Path Execution

少于 1 分钟读完

Trusted Path Execution (TPE) is an old and simple concept. It dates back to at least 1998 with route’s Phrack 62 article linked below. The goal of TPE is ...

搭建Git服务器

少于 1 分钟读完

只要在本地安装了git包,搭建Git服务器并不需要再安装额外的软件,为了简单,本文没有进行用户权限设置, 下面对使用github.com和使用本地git服务器创建新项目的步骤进行对比。

TCP概念拾遗

少于 1 分钟读完

###MSL MSL(Maximum Segment Lifetime, 报文最大生存时间)他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。 RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。 TCP的TIME_WAIT状态也称为2MSL等待状态,当TCP...

Hugepages 减少 TLB miss

少于 1 分钟读完

Hugepages是DPDK使用的一项技术,它为什么能提高包处理的速度呢? 正确答案是:使用huge page(如ubuntu14 下2M page)代替传统的4K page,减少VPN (Virtual page number)数目, 进而减少TLB(快表)管理的VPN到PPN(Physical page n...

1个快速排序等于5+个LeetCode题目

少于 1 分钟读完

快速排序最坏情况运行时间为O(n^2),虽然这个最坏情况运行时间比较差,但快速排序通常是用于排序的最佳的实用选择,这是因为其平均性能相当好:期望运行时间为O(nlgn),而且O(nlgn)记号中隐含的常数因子很小。 ——《算法导论》

Number of Islands

少于 1 分钟读完

Given a 2d grid map of ‘1’s (land) and ‘0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands...

3Sum

少于 1 分钟读完

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Word Search II

少于 1 分钟读完

Given a 2D board and a list of words from the dictionary, find all words in the board.

Word Search

少于 1 分钟读完

Given a 2D board and a word, find if the word exists in the grid.

Linux文件系统数据结构

3 分钟读完

下面是Linux fs 相关数据结构的一些笔记,列出的是我开发中经常用到的一些结构成员,以linux 3.12为例。

CodeViz学习笔记

1 分钟读完

CodeViz provides the ability to generate call graphs to aid the task of understanding code. 其原理是通过修改gcc,在编译过程中生成函数调用关系,然后用grapviz工具绘图。 生成简单的函数调用图可以用gprof实现...

TBB 入门

2 分钟读完

简介 应用场景 配置 实例 C++相关特性 相关资料

Linux 进程安全上下文 struct cred

3 分钟读完

在学习LSM过程中,发现有的系统为实现特定功能,需要在进程上附加自定义的信息,其中一个系统laminar基于内核2.6,定义一个新的 struct task_security_struct,然后挂接到task_struct的void *security指针上,security指针是LSM框架的辅助信息。

深入浅出 /proc

2 分钟读完

Linux下的proc目录有什么用途,我们查看内核版本号、加载的模块、CPU和内存使用等信息,甚至修改路由转发都是通过/proc目录进行的,本文在揭示/proc本质的基础上,对比了/proc编程的新老接口,以及一个应用实例。

Linux内核开发入门综述

少于 1 分钟读完

开学有3周了,还没写过博客,一方面是项目上的事,另一方面是阿里、腾讯都开始内推实习了,准备简历,复习一下。在准备找工作实习, 以及在面试中,能慢慢发现自己的短处和长处,有些面试的很惨,但是这不能说明你很low,只是你投的职位不是你所擅长的领域,职位选择失误。

VMware电话面试

1 分钟读完

这次VMware电话面试聊了30多分钟,主要涉及四个方面C语言,Python,Linux,TCP/IP. 详细考查知识点如下:

词法分析lex

1 分钟读完

本文不讲lex编程细节,主要是总结一下Lex能做什么,展现一下Lex和Yacc结合的威力,Lex编程技术可以参考《felx与bison(中文版)》和lex&yacc学习资料。 ###目录

收藏的经典计算机书籍

少于 1 分钟读完

我将收藏的计算机经典书籍整理了一下,托管在Github上,项目主页. 分成四大类别

2014

Libnids TCP会话重组分析

1 分钟读完

Vim源码分析环境搭建好了here,今天拿libnids练练手,虽然cscope命令才掌握几个常用的,但是阅读速度已经很快了,相对于source insight,至少不用担心成为鼠标手了。

无法挂载root fs

1 分钟读完

前些日子编译内核碰到一个根文件系统加载失败的问题,困扰了我好久,终于在昨天完美解决了:)

windows下构造链路层数据包

2 分钟读完

###不能解析硬件地址 昨天配置好libtins之后,又尝试了另外一个ExampleArp Spoofing, 一些跨平台引起的编译错误排除后,运行时出现MAC地址解析错误。 执行 arpspoof.exe gateway_ip, victim_ip

VS2013配置libtins

1 分钟读完

Linux下使用C库libnet,跨平台的Python库scapy都是不错的选择,Windows平台一直没有找到理想的C/C++数据包构造库, 今天就来学习一下libtins,libtins是一个跨平台的C++数据包构造和嗅探库。

LeetCode DP(中)

7 分钟读完

本篇是LeetCode DP类别的中级(Medium(前四) + Hard)题目:

LeetCode DFS(上)

3 分钟读完

LeetCode上目前关于DFS的题目有19个,其中有18道是二叉树相关的,只有一道是图方面的。DFS系列解题报告按难度分为上中下三部分,下面是第一部分Easy.

LeetCode回文数题目集锦

4 分钟读完

做LeetCode题目有3周了,完成了113/166,感觉LeetCode最大的特点就是题目简洁,不像Codeforces, CodeChef等,在进入正题之前先说个小故事,对我这样英语不好的人,理解题意就要半天,其次LeetCode比较规范,定义好了函数接口。以前总是搞C, Python, 这段时间也熟悉了C+...

指针引用应用场景

1 分钟读完

在leetcode刷题时,有一个链表加法的问题,我用指针引用技术减少了代码冗余。

月底总结

少于 1 分钟读完

这里是evernote中近3个月来的零碎笔记,没有时间先后之分。

arpspoof and dnsspoof

少于 1 分钟读完

最近搞了一个监听神器,尽管使用了网卡混杂模式,不过监听到的几乎全是本地流量, 为了获取更多有用的数据,搞一下中间人攻击,最基本的就是arpspoof + IP转发,这样就可以获得局域网内任何人的上网流量, 难得的是实验室没有做ARP防护,给arpspoof一个大行其道的机会。

最近一些思想碎片

少于 1 分钟读完

前些日子忙着项目验收,最近忙着整理成果,好久没有写文章了,下面主要是一些认知上的改变。

nc高级用法

1 分钟读完

nc实现后门 在《reverse shell原理》讲过用bash和python实现reverse shell的原理.

博客搬家

少于 1 分钟读完

玩wordpress有一年了,购买一年的虚拟主机快到期了,是续费还是转移,基于下面3个原因

通过配置文件修改屏幕分辨率

少于 1 分钟读完

ubuntu 9.10下编译内核时,在执行make menuconfig时,由于屏幕太小,导致打不开配置菜单,屏幕有多小,小的连打开System->Preferences->Display看不到’Apply’按键,所以只能通过修改配置文件来完成了

如何给Linux内核打补丁

3 分钟读完

Linux Kernel邮件列表上问的最多的一个问题就是:如何给Linux内核打补丁,更具体点就是,诸多trees/branches的一个补丁应该应用于哪个base kernel。希望这个文档能帮你解答这些疑问。

15步编译Linux内核

少于 1 分钟读完

Linux内核是Linux系统的核心。它管理用户输入/输出,硬件,并且控制计算机的电源。通常Linux发行版使用的内核功能是丰富全面的(sufficient,可理解为面向大众的,功能丰富全面,有很多功能对你都没有用处),这允许你定制自己的专业内核!

reverse shell原理

少于 1 分钟读完

RevSh简介 当你需要远程控制一台服务器时,这个服务器有防火墙保护着,阻止外来的TCP连接,这时就需要Reverse Shell技术,reverse shell技术如其名,也叫逆向shell,反弹shell,也在就是说在服务器端发起TCP连接,当连接建立成功后,你就获得服务器的一个shell,可以操纵远程服务器...

w3af学习笔记(三)

1 分钟读完

本文以menu切换,插件加载与启动为主线,分析w3af源代码中函数调用和各类之间的继承与组合关系,阅读之前请先有一个DFS(深度优先遍历)的准备。 一、menu切换 1.menu类继承关系

NineRings游戏

少于 1 分钟读完

>>游戏简介<< NineRings是根据中国古典益智游戏九连环规则,抽象出来的一款休闲益智游戏!

Snort预处理插件arpspoof

少于 1 分钟读完

引言 ARP协议为IP地址到硬件地址提供动态映射。 ARP欺骗<==>ARP spoofing<==>ARP病毒<==>ARP poisoning<==>ARP攻击。

DNS放大攻击完整过程模拟

少于 1 分钟读完

引言 网上搜索一下“DNS放大攻击模拟”,发现只是一个python scapy脚本,实现DNS查询功能,且不说那个查询记录有问题,DNS放大攻击能够成功实施的一个关键是控制DNS服务器,在DNS服务器上设置一条特别大的文本记录,以此达到放大的目的。本文使用3台机器模拟完整的DNS放大攻击过程。 实验环境 DNS服...

onestraw失而复得

少于 1 分钟读完

山穷水尽 2014年6月9日,本博客租用虚拟主机出现一次严重故障,导致数据库数据全部丢失,虚拟主机提供商给出的解释是: “磁盘阵列卡报错,向硬盘写入垃圾数据,导致操作系统、文件系统和用户文件出现不同程度不可逆转的损坏。” 而本人以前疏于备份,致使近100多篇文章全部丢失!故障发生后,我立即采取了“应急响应”措施...

Portscan检测工具

少于 1 分钟读完

0. 引言 snort的sfportscan插件将端口扫描分为Portscan, Decoy Portscan, Distributed Portscan, Portsweep四种类型,其中Portscan最简单,也最容易被检测,本文介绍一种检测portscan的思路,并实现一个检测工具。 1. portscan...

snort插件接口规范

少于 1 分钟读完

0.引言 为什么要了解snort插件的接口呢?有3个出发点:

sfportscan插件检测端口扫描

2 分钟读完

0.引言 sfportscan插件将端口扫描分为四种类型,分析每一种扫描类型的特点,抽象出四个流量特征来描述每一种扫描类型,用简单的统计方法来检测扫描。首先有一个时间窗口,统计每一个时间窗口内4个特征值的大小,当这4个特征值满足一定条件(超出阈值)时,判定为某一扫描类型,其中的阈值是根据经验人为设定的。

基于snort的域名监控工具DnsEye

少于 1 分钟读完

0.源码学习 snort 作为世界上最流行的开源入侵检测系统,至今已有15的历史了,最新release2.9.6.1的源码有近5MB大小,使用命令

C/S架构的网络聊天工具OC

1 分钟读完

网络编程的一个大作业《编写网络聊天工具》,拿出来和大家分享一下实现思路。 1.简介 模仿QQ来写的一个工具,使用Python+PyQt开发,为快速实现网络聊天工具的基本逻辑,服务器端没有实用数据库,客户端有登录窗口、注册窗口、好友列表窗口和对话框。主要功能包括: 注册、登录; 添加好友; 支持多会话; ...

局域网通信工具LJ

少于 1 分钟读完

1. LJ简介 LJ类似于飞秋,使用Python + PyQt开发,有一个主界面和对话框,在主界面可以显示局域网内的在线主机,切换网卡等,在对话框可以进行一对一聊天和文件传输。主要包括功能包括: 自动扫描在线主机,动态显示在好友列表; 对于多网卡主机,可以自由切换网卡; 文字聊天; 文件传输; 支持多...

NTP、DNS反射和放大攻击的本质

少于 1 分钟读完

反射攻击 反射攻击利用网络协议(UDP,ICMP)的无连接性,向服务器发送一个NTP/DNS请求,在这个请求数据报中,伪造源IP(这个源IP就是你要攻击的主机IP),服务器收到请求后,正常情况下返回一个应答,应答报文的目的IP就是你伪造的源IP,即被攻击的主机IP。比较著名的反射型DDoS攻击有smurf.

影子寄存器

少于 1 分钟读完

内核中有好多处类似下面的汇编代码(保护模式下) movl $0x10,%eax mov %ax,%ds mov %ax,%es mov %ax,%fs mov %ax,%gs 我就纳闷啊,内核加载时,BIOS在运行在实模式下,段寄存器是16位,段寄存器存储的是段基址,左移4位加上段偏移就是实际的物理内存...

python getopt函数详解

少于 1 分钟读完

getopt模块可以帮助脚本解析sys.argv的命令行参数,它遵守和Unix getopt()函数相同的约定,该模块提供两个函数和一个异常。

KDD CUP 99数据集简介

1 分钟读完

KDD CUP 99数据集是什么,为什么很多入侵检测领域的科研论文都用该数据集进行实验?

RestMusic tool

1 分钟读完

引言 作为一个码农,由于工作性质,需要整天坐在电脑前,长时间坐着,如果不能有规律的锻炼运动,会影响腰椎和颈椎的健康,长此以往,就会严重伤害身体健康。

python pickle module

少于 1 分钟读完

一、pickle模块概述 pickle 这个单词的中文意思为 n. 腌菜,泡菜;腌制食品; v. 腌渍

树状数组/二分索引树(BIT)

少于 1 分钟读完

在CF上做题时,碰到”Time limit exceeded”错误,程序中频繁的遍历连续子序列,当序列长度增加时,程序效率急剧下降,在此学习一种高效的数据结构——树状数组。

pyrcc4处理qrc资源文件

少于 1 分钟读完

qrc文件是xml格式的资源配置文件,扩展名为qrc,应用程序通过qrc文件来关联使用硬盘上的图片等资源。

2013

Linux终端显示下载进度

少于 1 分钟读完

在Linux的终端下更新、下载、安装工具时,会有一个类似68%这样动态变化的进度值,这是如何做到的呢

检测链表中存在的环

少于 1 分钟读完

“最后的答案: 首先,排除一种特殊的情况,就是3个元素的链表中第2个元素的后面是第1个元素。设置两个指针p1和p2,p1指向第1个元素,p2指向第3个元素,看看 它们是否相等。如果相等就属于上述这种特殊情况。如果不等,把p1向后移一个元素,p2向后移两个元素。检查两个指针的值,如果相等,说明链表中存在循环。如果不...

C语言标准输入流stdin陷阱

少于 1 分钟读完

在C语言中,在程序开始运行时,系统自动打开3个标准文件:标准输入、标准输出、标准出错输出,对应的文件指针分别为 stdin、stdout、 stderr,这3个文件都与终端(命令行)相联系,所以在使用stdin、stdout、stderr时不需要进行打开操作,直接使用就行。

VMware手动配置虚拟网卡NAT

少于 1 分钟读完

不知什么原因,我在win7下安装好VMware Workstation 9.0.2后,网络连接中并没有多出VMnet1,VMnet8两个虚拟网卡,我在虚拟机中安装的BackTrack5,需要更新一些软件,网上查了很多 资料,大多复制过来,粘贴过去的,都讲VMware网络连接的三种模式原理,不知所云。

从TCP/IP协议栈看计算机层次结构

少于 1 分钟读完

解决“大”问题的诀窍,就在于将其分解成较小、较易管理的问题。如果分解后的问题还是太庞大,再进一步分解。 ——《Head First Javascript》

并查集-UnionFind

少于 1 分钟读完

并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。

SSL握手协议设计原理

少于 1 分钟读完

一、认识SSL SSL指Secure Sockets Layer,即安全套接层。 SSL是网络安全通讯的基础,广泛应用于网上银行、网上支付、电子商务等重要网络服务中。 SSL在传输层对网络连接进行加密。 SSL采用公开密钥技术,保证两个应用间通信的保密性和可靠性。 SSL在服务器和客户机两端可同时被...

fork函数

少于 1 分钟读完

“一个现有的进程可以调用fork函数创建一个新进程,fork函数被调用一次,返回两次,两次返回唯一的区别是子进程返回值是0,而父进程的返回值则是新子进程的进程ID”——《APUE》

堆溢出

少于 1 分钟读完

堆是用于动态内存分配的内存空间,malloc和new函数都是在堆上分配的内存。堆的另一含义就是数据结构中的大根堆、小根堆(也叫优先级队列)。 缓冲区溢出分为栈溢出和堆溢出。使用malloc等在堆上申请内存时,分配两部分,一部分是堆头信息,另一部分是数据区。

函数指针的用途

少于 1 分钟读完

“函数只不过是变量…….把函数主体看成值,函数名则为变量名称”——《head first javascript》

最复杂的函数指针——signal函数

少于 1 分钟读完

《APUE》10.3节开头的一个函数就打击了我,这个函数是就最简单的信号函数signal。它是第一个让我连声明都看不懂的函数。

C语言异常处理setjmp/longjmp

少于 1 分钟读完

常见的goto语句也可以实现跳转,但是仅限于当前函数内,使用setjmp()和longjmp()函数可以实现跨函数跳转,主要用途是实现C语言的异常处理机制,这两个函数包含在头文件setjmp.h中。数据类型jmp_buf用于保存恢复调用环境所需的信息,即程序调用环境上下文,运行时的堆栈信息。

使用winsock发送email

1 分钟读完

使用socket编写发送邮件的程序非常简单,只需要按照smtp协议的过程,一步步来即可。