实验二WINPCWP编程_第1页
实验二WINPCWP编程_第2页
实验二WINPCWP编程_第3页
实验二WINPCWP编程_第4页
实验二WINPCWP编程_第5页
免费预览已结束,剩余6页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验WIN PCWP编程 实验目的 了解WINPCA啲架构 学习WINPCAP编程 实验原理 WinPcap 是一个基于 Win32 平台的,用于捕获网络数据包并进行分析的开源库比如 sockets 。 这是一 比如协议处理, 封装数据因为有些应用程序需要直接访即没有被操作系统利用网络大多数网络应用程序通过被广泛使用的操作系统元件来访问网络, 种简单的实现方式, 因为操作系统已经妥善处理了底层具体实现细节 包等等),并且提供了一个与读写文件类似的,令人熟悉的接口。然而,有些时候,这种 “简单的方式 ”并不能满足任务的需求, 问网络中的数据包。 也就是说, 那些应用程序需要访问原始数据包, 协议

2、处理过的数据包。WinPcap 产生的目的,就是为 Win32 应用程序提供这种访问方式; WinPcap 提供了以下 功能1.2.3.4.捕获原始数据包,无论它是发往某台机器的,还是在其他设备(共享媒介)上进行交换的 在数据包发送给某应用程序前,根据用户指定的规则过滤数据包 将原始数据包通过网络发送出去收集并统计网络流量信息以上这些功能需要借助安装在 Win32 内核中的网络设备驱动程序才能实现, 再加上几个动态链 接库 DLL 。所有这些功能都能通过一个强大的编程接口来表现出来,易于开发,并能在不同的操作系统上使用。这本手册的主要目标是在一些程序范例的帮助下,叙述这些编程接口的使用。Win

3、Pcap 的典型应用有:WinPcap 可以被用来制作网络分析、监控工具。一些基于1.网络与协议分析器(network and protocol analyzers)2.网络监视器 (network monitors)3.网络流量记录器(traffic loggers)4.网络流量发生器(traffic generators)5.用户级网桥及路由(user-level bridges and routers)6.网络入侵检测系统(network intrusion detection systems (NIDS)7.网络扫描器 (network scanners)8.安全工具(security

4、 tools)实验内容通过学习WIN PCA架构,编写一个网络抓包程序。Winpcap是针对 Win32平台上的抓包和网络分析 的一个架构。它包括一个 核心态的包过滤器,一个底层的动态链接库(packet.dll )和一个高层的不依赖于系统的库(wpcap .dll )首先,抓包系统必须绕过 操作系统的协议栈来访问在网络上传输的原始数据包(rawpacket),这就要求一部分运行在操作系统核心内部,直接与网络接口驱动交互。这个部分是系统依赖(system dependent )的,在Winpcap的解决方案里它被认为是一个设备驱动,称作 NPF ( Netgroup Packet Filter

5、 )。Winpcap 开发小组针对 Windows95 ,Windows98 ,WindowsME ,Windows NT 4 ,Windows2000 和 WindowsXP 提供了不同版本的驱动。这些驱动不仅提供了基本的特性(例如抓包和injection),还有更高级的特性(例如可编程的过滤器系统和监视引擎)。前者可以被用来约束一个抓包会话只针对网络通信中的一个子集(例如,仅仅捕获特殊主机产生的f2通信的数据包),后者提供了一个强大而简单的统计网络通信量的机制(例如,获得网络负载或两个主机间的数据交换量)其次,抓包系统必须有用户级的 程序接口 .,通过这些接口,用户程序 可以利用内核驱动提

6、供的高级特性。Winpcap提供了两个不同的库:packet.dll 和 wpcap.dll。前者提供了一个底层API,伴随着一个独立于Microsoft操作系统的编程接口,这些API可以直接用来访1问驱动的函数;后者导出了一组更强大的与 libpcap 一致的高层抓包函数库(capture操作系统无关的方式进行。primitives)。这些函数使得数据包的捕获以一种与网络硬件和Z011T恢帆邑1丰切咒ft*5右T刖口“丰如故ftWHSLAh>1PJia19U11I*JITLB弹诽歴押厲Jsn>艸筋;忙一-afiM_HL+mBTME:JL叶L丄帕刃;IFM.LSA9j7:|=F_H

7、L+阳K召L-i 1*18 ia;lfHXO丹;MLWk 花防口请側.FT仟穴肝肝贰姑坯门軒MMprrerWMOUDuauMlMKk 口gm一 aUXMrOfrW .DI 那PEM.-OlflMarWrt 0 恥 UhDIIKpJIljMlMIf核心代码:抓包函数UINT _cdecl CYwkPackDlg: CapThread( LPVOID IpParameter ) CYwkPackDlg* this2 ; pcap_t * adhandle ;char errbuf PCAP_ERRBUF_SIZ; E pcap_dumper_t * dumpfile ;struct pcap_pk

8、thdr * header; const u_char * data;DWORDres ;bool bExit ; static long i =0,j =0;ListData List ;struct ether_header * eth;u_char * mac_string ; struct iphead * IPHead; struct arphead * ARPHea;din_addr ipaddr ;this2=( CYwkPackDlg*) IpParameter ;i =0; j =0; charif式)p256;CStringA ts ( this2 -> Adapte

9、rName. GetBuffer (); memcp(yp, ts . GetBuffer (), 256);( adhandle = pcap_open_live ( p,65536,1 ,1000, errbuf ) = NULL) / 打开网卡接口(混杂模: MessageBox(0,L "不能打开网络适配器 , 请在网卡设置中经行设置 ",L "错误" ,0);EnterCriticalSection (&( this2 -> csThreadStop ); / 关闭线程 2 this2 -> bThreadStop =tru

10、e ;LeaveCriticalSection (&( this2 -> csThreadStop );SetEvent ( this2 -> eThreadStart );return 0;dumpfile =pcap_dump_open( adhandle , CStringA ( this2 -> CapFilePath . GetBuffer (); / 打 开数据文件失败if ( dumpfile =NULL):MessageBoXO丄"不能打开记录文件"丄"错误",0);EnterCriticalSection (&

11、amp;( this2 -> csThreadStop ); this2 -> bThreadStop=true ;LeaveCriticalSection (&( this2 -> csThreadStop ); SetEvent (this2 ->eThreadStart );return 0;EnterCriticalSection (&( this2 this2 ->bThreadStop=false ;LeaveCriticalSection (&( this2SetEvent (this2 ->eThreadStart-&

12、gt;csThreadStop ); / 开始线程->csThreadStop ););: MessageBox(0,L "开始抓包 ",L "ok" ,0);while (1)EnterCriticalSection (&( this2 -> csThreadStop ); bExit =this2 ->bThreadStop;LeaveCriticalSection (&( this2 -> csThreadStop ); if ( bExit ) return 0;res = pcap_next_ex (ad

13、handle,&header,&data ); if (res=0)/ 超时 Sleep(100);continue ;elseif (res<0)/ 操作失败break ;pcap_dump( u_char *) dumpfile , header, data );eth=(ether_header *) data; mac_string =eth -> ether_shost ;wsprintf (List . sMac,L "%02X:%02X:%02X:%02X:%02X:%02,X*"mac_string ,*( mac_string

14、+1),*( m ac_string +2),*( mac_string +3),*( mac_string +4),*( mac_string +5);mac_string =eth -> ether_dhost ;wsprintf (List .dMac,L"%02X:%02X:%02X:%02X:%02X:%02,X*"mac_string ,*( mac_string +1),*( m ac_string +2),*( mac_string +3),*( mac_string +4),*( mac_string +5);_itow ( header ->

15、 caplen , List . Len,10); memcp(yList .Text , data ,45); / 数据不含以太网头 List .Text 45= '0' ;int len =wcslen ( List .Text );/char *list1=new charlen+1;char * list1 = ( char *) malloc (len + 1); wcstombs( list1 , List .Text , len + 1); list1 len =0;this2 -> DecodeChar( list1 ,len );/delete list

16、1;switch ( ntohs ( eth -> ether_type ) case ETHERTYPE_A:RP/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bArp)bFilter=true;break;wcscpy( List . Procotol ,L "ARP");ARPHea=d( arphead *)( data +14);wsprintf (List . sIP,L "%d.%d.%d.%d", ARPHea-d> arp_sourc

17、e_ip_address 0, ARPHea-d> arp_sou rce_ip_address 1, ARPHea-d> arp_source_ip_address 2, ARPHea-d> arp_source_ip_address 3);p_destination_ip_address tion_ip_address 3);wcscpy( List wcscpy( List break ;wsprintf (List . dIP,L "%d.%d.%d.%d", ARPHea-d> arp_destination_ip_address 0, A

18、RPHea-d> ar1, ARPHea-d> arp_destination_ip_address 2, ARPHea-d> arp_destina. sPort ,L "-" ); . dPort ,L "-" );case ETHERTYPE_REVA: RPwcscpy( List . Procotol ,L "RARP"); break ;case ETHERTYPE_I:PIPHead=( iphead *)( data +14); ipaddr =IPHead-> ip_souce_address

19、 ;wsprintf (List . sIP,L "%d.%d.%d.%d", ipaddr . S_un. S_un_b. s_b1, ipaddr . S_un. S_un_b. s_b2, ip addr. S_un. S_un_b. s_b3, ipaddr . S_un. S_un_b. s_b4);IPHead-> ip_destination_address;wsprintf (List . dIP,L "%d.%d.%d.%d", ipaddr . S_un. S_un_b. s_b1, ipaddr . S_un. S_un_b.

20、 s_b2, ip addr. S_un. S_un_b. s_b3, ipaddr . S_un. S_un_b. s_b4);switch ( IPHead-> ip_protocol )case 1:/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bIcmp)bFilter=true;break; wcscpy( List wcscpy( List wcscpy( List break ;. Procotol ,L "ICMP"); . sPort ,L "-&q

21、uot; );. dPort ,L "-" );case 6:/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bTcp)bFilter=true;break; wcscpy( List . Procotol ,L"TCP"); wsprintf*)( data +16+20)-> th_sportwsprintf*)( data +16+20)-> th_dportbreak ;(List . sPort ,L "%d", ntohs

22、 ( ( );(List . dPort ,L "%d", ntohs ( ( );tcpheadtcpheadcase 17:/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bUdp)bFilter=true;break; wcscpy( List . Procotol ,L"UDP"); wsprintf (List . sPort , L "%d" , ntohs ( ( *)( data +16+20)-> udp_source_p

23、ort );wsprintf (List . dPort ,L "%d", ntohs ( ( );udpheadudphead*)( data +16+20)-> udp_destinanion_portbreak ;default :wcscpy( List . Procotol wcscpy( List . sIP,L "- wcscpy( List . dIP,L "- wcscpy( List . sPort ,L"-" ); wcscpy( List . dPort ,L"-" ); break ;丄"未知IP包");););break ;case ETHERTYPE_P:UPwcscpy( Lis

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论