昨天看书的时间不多,带了一本书去自习,没想到这么快就把那本书看完了。
<<TCP/IP数据包分析程序篇>>昨天上午看完了。感觉是一本蛮基础的书。从数据包分析程序的运行和安装到数据包分析程序的全部源代码,都很详细。就连在LINUX下怎么输入命令去执行,都有详细地列出。这本书是日本的小高知宏写的,科学出版社出版。
看了书中提供的代码,它的方法其实不复杂。首先,利用libpcap库提供的函数抓取数据包,如果对libpcap库了解的话,这很简单,整个代码是用C写的,我把抓取数据包这部分代码列出:
#include <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/if_ether.h>
#include <pcap.h> //pcap程序库
#define DEFAULT_SNAPLEN 68
//表示数据包的数据
void
packet_print
(u_char *user,const struct pcap_pkthdr *h,const u_char *p)
{
printf("Find data/n");
}
//main
//取得数据包的设定和开始
int
main(int argc,char *argv)
{
char ebuf[PCAP_ERRBUF_SIZE];
pcap_t *pd;
if(argc<=1){ //参数检查
print("usage: %s<network interface>/n", argv[0]);
exit(0);
}
/* 设置使用pcap */
if( (pd=pcap_open_live(argv[1], DEFAULT_SNAPLEN,1,1000,ebuf))==NULL){
(void)fprintf(stderr,"%s",ebuf);
exit(1);
}
/* 由pcap_loop取得数据包 */
/* 因为指定无限循环,所以结束时输入控制键C */
if(pcap_loop(pd,-1,packet_print,NULL)<0){
(void)fprintf(stderr,"pcap_loop: %s/n",pcap_geterr(pd));
exit(1);
}
pcap_close(pd);
exit(0);
}
要实现不同的功能只需相应地改动packet_print函数即可,而main函数大致是相同的,从程序中可以看到,没有什么特别复杂的地方。就上面这个程序而言,用到的也就是pcap的库函数。
取得数据包后,就要相应的对它进行处理了。在书中介绍的处理方法中,如果对TCP/IP协议和协议的结构理解的话,程序也就是对字符串的处理了。:)不知道是不是我想得太简单了。看来之后的几天里,最重要的也就是掌握TCP/IP协议了。