使用 libpcap 分析网络报文 (1)

最近要对 tcpdump 抓到的报文进行分析,开始的时候用 wireshark 的命令行工具 tshark 把分析的结果保存成文本文件然后再用正则表达式匹配需要的字段,这样好处是不用自己分析协议,只要抓取需要的字段就行了,缺点是相当地慢,330M 的 tcpdump 文件经过 tshark 处理后得到 5G+ 的文本文件,还要从这 5G+ 文本中做字符串匹配……

于是往下走一层,发现 wireshark 和 tcpdump 都使用了同样的库--libpcap,来实现抓包操作。对于抓包需要用到的 libpcap 函数并不多,主要是自己分析协议部分比较麻烦。网上找了些 libpcap 的资料,在这里总结一下。

简介(参考资料 [1])

libpcap 是一个 C 语言库,libpcap 的英文意思是 Packet Capture library,即数据包捕获函数库,其功能是通过网卡抓取网络以太网中的数据包。这个库为不同的平台提供了一致的 c 函数编程接口,在安装了 libpcap 的平台上,以 libpcap …

阅读全文…

pthread 学习笔记 (1)

pthread 是 POSIX Thread 的缩写,是一套标准线程库,大部分的 *nix 系统都实现了它,在 windows 上也有相应的实现。这里的实验环境为 debian 6.0。

并行和并发(参考资料 [1])

并行的英文是 parallelism,并发的英文是 concurrency,两者表达的意思并不一样:并行是指多条指令 同时 执行(这里的“同时”指时间上的同时),而并发是指多条指令可能以任意顺序执行(也有可能是并行执行)。

第一个 pthread 程序

#include <stdio.h>
#include <pthread.h>

static void* print_tid(void* arg)
{
   printf("thread id: %d\n", *((int*)arg));

   return arg;
}

#define THREAD_NR 10


阅读全文…

programming in lua (3)

5-6 章。

函数

函数是完成某一特定功能的语句集合。函数使用括号标识,括号内是传递给函数的参数。如果函数只有一个参数,且这个参数是一个字符串或者 table 的 constructor,那么括号是可选的,例如:

print("Hello")
print "hello"
print (type({x = 10, y = 20}))
print (type {x = 10, y = 20})

函数定义的语法是:

function func_name (parameter)
   body
end

如果括号中的参数多于 1 个用逗号隔开,如果没有参数就不用写。

给函数传递参数时,如果参数的个数比函数定义的个数少,则靠右的参数被赋值为 nil;如果传递的参数比函数定义的个数多,则多出来的值被忽略:

function func(a, b, c)
   

阅读全文…

programming in lua (2)

3-4 章。

lua 支持的数值运算符有:“+”(加),“-”(减),“*”(乘),“/”(除),“^” (指数),“%”(求余),“-”(取相反数)。“%”还有取特定精度的作用,例如“x%1”表示取 x 的整数部分,而“x%0.01”则取到小数点后两位。

关系运算符:“<”,“”,“<=”,“=”,“==”,“~=”(不等于)。

逻辑运算符:“and”,“or”,“not”。

连接操作符:“..”(将两个字符串连接起来)。

运算符的优先级从高到低排列,同一行的运算符优先级相同,按出现的位置从左往右结合:

^
not # -(取相反数)
* / %
+ -
..
< > <= >= ~= ==
and
or

实在记不清的话加括号就行了。

table 的初始化使用“{}”或者在“{}”中包含初始值:

letters = {"a", "b", "c", "d", 

阅读全文…

git 使用笔记 (1)

记录一下实际使用过程中用到的命令和结果,不分解过程,也比较零散。详细的分析可以参考这本书:《Pro Git》

本地操作

要对某个目录进行版本控制,可以在该目录下执行命令(假设工作目录是 git-test,里面只有一个文件 a.txt):

git init

之后会看到提示:

Initialized empty Git repository in /path/to/git-test/.git/

在 git-test 目录下生成一个目录 .git,里面就是 git-test 的版本信息。git 只会在根目录下建立一个 .git 目录包含所有的信息,而不像 svn 一下在各个子目录下都建一个 .svn 目录。

建立了目录信息,但是 git 不会主动把目录下的所有文件或子目录都纳入版本控制中,必须手动添加要 git 进行版本控制的内容。如果要将 a.txt 加入版本控制,执行下面的命令:

git add a.txt

阅读全文…

programming in lua (1)

《programming in lua》第二版第 1-2 章。

运行环境

这里使用的 lua 版本是 5.1.4,操作系统是 debian 6.0,

到 lua 的官网下载源码包,因为是 ANSI C 写成的解析器,所以在各个平台上编译都很方便。编译之后会在源码目录里的 src 下生成两个可执行文件:lua 和 luac,其中 lua 用来解析脚本,luac 用来把脚本编译成二进制文件。在源码包里也带有一些例子,在 test 目录下。例如可以用下面的命令来运行 test 下的例子(假设当前目录为解压后的源码根目录):

./src/lua test/hello.lua

或者使用 luac 把脚本转换成二进制文件:

./src/luac test/hello.lua

默认的输出文件是 luac.out。接着可以使用 lua 来运行这个二进制文件:…

阅读全文…

qemu 的使用和配置

之前用的是低端本本,32 位的 u 还不支持 vt,虚拟机用的是 virtualbox,虽然挺好用,但是每次升级内核都得重新编译一遍模块,有时还不一定能编译过,所以尽管版本升到 4.0,一直在用的都是 1.6.6 版,虽然简陋点,但是写写文档用用网银还是能满足的。

买了新本第一时间就把 kvm 装上了。kvm 的全称是 kernel-based virtual machine,从 2.6.20 开始集成到内核中。不过 kvm 需要 cpu 的 vt 技术支持,图形性能也不如 virtualbox 和 vmware 的好,但是 cpu 和内存的占用个人感觉要比前两者好。

刚装的时候用的是深度的精简版 xp,结果风扇狂转,cpu 占用率 100%,这个和网上说的像打了鸡血一样不相符啊……到论坛去问了一下,发现是 iso 的问题,重新装了个 win7 就好多了。

要看 cpu …

阅读全文…

xpdf 配置笔记

先说一下系统环境是 debian 6.0.2,xpdf 版本是 3.0.2。

为神马要强调一下环境呢?因为以前用 kpdf 有乱码的时候可以装 xpdf-chinese-simplified(kpdf 是基于 xpdf 的,大概是 debian 4.0 的时候这个包还在),但是现在搜了一下已经没了,然后从网上下了一个 deb,安装的时候说要 xpdf-common 这个包,一搜又没有了(直接到源网站上可以找到,是 debian5 的版本,但是用 aptitude search 搜不到,应该是在 6 中被移除了)。

把 pdf 的背景颜色改为浅绿色(#cce8cf),这样看的时间长了眼睛不容易累,但是一直都没找到 evince 的修改 pdf 背景颜色的选项,想装回 kpdf 又找不到(kde4 的 pdf 阅读器已经改为 okular 了,功能强大,依赖的包也更多,装个看 pdf …

阅读全文…

字符串匹配之 KMP 算法

某天在群里看到 井大侠 提起传说中的“看毛片”算法,在网上搜到一篇好文章(见参考资料 [1]),发现从有限状态自动机的角度来理解可能会更容易一些。

简单的逐个字符比较

最简单的匹配算法是将两个字符串第一个字符对齐,然后开始逐字符比较。当在某个位置发现不匹配时,把模式串向右移动一个字符,再从模式串的第一个字符开始与主串对应位置的字符开始比较。例如要从字符串 T 中查找模式串 P,比较过程如下:

                        1                   2
pos 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
T   A B C Z 

阅读全文…

在本机搭建 wordpress 的一些问题

这里主要是记录一下在本地搭 blog 过程中遇到的一些问题。

这个 blog 使用的是的 wordpress 3.4.x 汉化版,插件有 google xml sitemap,wp-pagenumbers(翻页插件),wp-syntax(代码高亮)。

导入导出最好使用 cpanel 中的备份功能,如果使用 wordpress自带的导入导出功能(wordpress_importer),再次导入的时候反斜杠会丢掉!

安装apache,php和mysql

安装主题

把主题解压到 $WP_ROOT/wp-content/themes/主题名/ 下即可在“外观-主题”中找到。有时用 ftp 上传会出现错误。

修改固定链接

默认的链接名“?p=xxx”很不爽,也不利于搜索引擎检索。可以在“设置-固定链接”中修改成自己想要的格式,这个功能需要 apache 的 mod_rewrite 模块。

这里要提一下的是在本地搭建的时候可能还没有 .htaccess 文件。文件的位置应该是 wordpress 的根目录,也就是和 wp-config.php 同一层。把 .htaccess 文件修改权限为 777,然后在控制版中的“设置-固定链接”修改,保存文件,为防止误改,最后再把权限改回 644。…

阅读全文…