网络数据包监视程序开发日志(三)

  昨天看书的时间不多,带了一本书去自习,没想到这么快就把那本书看完了。

  <<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协议了。

你可能感兴趣的:(linux,网络,struct,null,出版,程序开发)