linux系统下sniffer的实现(二)论文

linux系统下sniffer的实现(二)论文

ID:24694555

大小:83.00 KB

页数:16页

时间:2018-11-16

linux系统下sniffer的实现(二)论文_第1页
linux系统下sniffer的实现(二)论文_第2页
linux系统下sniffer的实现(二)论文_第3页
linux系统下sniffer的实现(二)论文_第4页
linux系统下sniffer的实现(二)论文_第5页
资源描述:

《linux系统下sniffer的实现(二)论文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux系统下Sniffer的实现(二)论文BOOLReadTable()//读取Table.DAT{FILE*tab=fopen(TABLE_FILE,"r");//打开文件intcount=fread(Tab,sizeof(int),TAB_SIZE,tab);fflush(tab);//刷新文件流for(inti=0;i=TAB_SIZE-2;i++)if(Tabi!=-1Tabi+1!=-1)Tabi+1=Tabi+1+Tabi;elsebreak;returnTRUE;}intLoadPack()//加载数

2、据包{inti;intload_packs=0;FILE*pack=fopen(PACK_FILE,"r");for(i=0;iBUF_COUNT;i++){if(Tabto_be_load+i!=-1Tabto_be_load+i+1!=-1){intsize=Tabto_be_load+i+1-Tabto_be_load+i;intoffset=Tabto_be_load+i;if(fread(buf+i,size,1,pack)!=1){printf("Readerror.../n/n");exit(1);}lo

3、ad_packs++;//更新变量}else{/*donothing*/}}fflush(pack);//刷新数据流to_be_load+=load_packs;//更新变量returnload_packs;//返回读取的数目}3.4.2系统中的buffer在现实中的很多系统中,buffer是很重要的一种思想,为的就是减少读取外部存储的次数,延长设备的使用寿命。Buffer在计算机系统中,应用是很广泛的,例如,在硬盘和内存之间存在一层缓冲区,在CPU和内存之间同样也存在一层缓冲区if_ether.h#includeif

4、.h调用socket函数的原型是:intsocket(intdomain,inttype,intprotocol);本函数涉及3个输入参数:domain参数表示所使用的协议族;type参数表示套接口的类型;protocol参数表示所使用的协议族中某个特定的协议。如果函数调用成功,套接口的描述符(非负整数)就作为函数的返回值,假如返回值为-1,就表明有错误发生。使用socket函数捕获链路层数据帧,domain参数应指定为AF_I协议族,表示采用Inter协议族;type参数指定为SOCK_PACKET,表示获取链路层数

5、据,进而分析各层的协议数据单元;而protocol参数采用htons(0x0003),表示可以截取所有类型的数据帧。这里htons函数用于短整数的字节顺序转换。计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Inter上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储数据的机器,在Inter上传输数据时就需要进行转换,否则就会出现数据不一致。在捕获数据包时socket函数调用形式为:intfd;//fd是套接口的描述符fd=socket(AF_I,SOCK_PACKET,hton

6、s(0x0003));l设置网卡工作模式:要使建立的套接口能够真正捕获到同一网段其它站点的数据,还必须设置网卡工作于“混杂”模式,可以使用ioctl函数,原型如下:intioctl(intd,intrequest,ifr),ioctl系统调用用于对套接口、网卡等软硬件设施进行底层控制,实际的操作来自各个设备自己提供的ioctl接口。设置网卡于“混杂”方式的LinuxC程序段如下:structifreqifr;strcpy(ifr.ifr_name,dev);//(char*)dev标识设备名,如:eth0i=ioctl

7、(fd,SIOCGIFFLAGS,ifr);//表示要求取出工作方式if(i0){close(fd);perror("can'tgetflags/n");exit(0);}ifr.ifr_flags

8、=IFF_PROMISC;//在标志中加入“混杂”方式i=ioctl(fd,SIOCSIFFLAGS,ifr);//表示要求设定工作方式if(i0){perror("can'tsetpromiscuous/n");exit(0);}l从套接口读取链路帧:套接口建立以后,就可以从中循环地读取链路层数据帧。因此,还需要建立数据

9、帧的缓冲区,并把帧头结构的指针指向这一缓冲区的首charepETH_FRAME_LEN;structethhdr*eh;intfl;eh=(structethhdr*)ep;//指向帧头fl0=read(fd,(etherpacket*)ep,sizeof(ep));//fl0为截取的数据帧帧长这里帧头结构类型ethhdr在/us

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。