使用 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)
   

阅读全文…