版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Charpt Charpt 9 9: Winpcap分析與應(yīng)用分析與應(yīng)用n雖然Unix 平臺(tái)上的BSD 包截獲系統(tǒng)提供了一組供應(yīng)用程序直接調(diào)用的網(wǎng)絡(luò)數(shù)據(jù)包截獲函數(shù),允許應(yīng)用程序與網(wǎng)卡間直接進(jìn)行交互, 但在Win32 平臺(tái)上, 目前主要使用WinPcap 體系結(jié)構(gòu)。nWinPcap 是基于Win32 平臺(tái)的網(wǎng)絡(luò)包截獲和分析的系統(tǒng),它具有豐富的網(wǎng)絡(luò)數(shù)據(jù)包處理函數(shù),其功能比BSD 包截獲系統(tǒng)更強(qiáng),如“包監(jiān)視”和“包發(fā)送”等功能函數(shù)在早先的Unix 平臺(tái)上是不具備的。nWinPcap是一個(gè)重要的抓包工具,它是libpcap的Windows版本。是一個(gè)免費(fèi)公開的軟件系統(tǒng)。它用于windows系統(tǒng)下的直接
2、的網(wǎng)絡(luò)編程。Windows平臺(tái)下的包捕獲技術(shù)n網(wǎng)絡(luò)與協(xié)議分析器 (network and protocol analyzers) n網(wǎng)絡(luò)監(jiān)視器 (network monitors) n網(wǎng)絡(luò)流量記錄器 (traffic loggers) n網(wǎng)絡(luò)流量發(fā)生器 (traffic generators) n用戶級(jí)網(wǎng)橋及路由 (user-level bridges and routers) n網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng) (network intrusion detection systems (NIDS) n網(wǎng)絡(luò)掃描器 (network scanners) n安全工具 (security tools) Winpca
3、p特別適用于下面這幾個(gè)經(jīng)典領(lǐng)域:特別適用于下面這幾個(gè)經(jīng)典領(lǐng)域:nWinpcap有些方面不能做: 它不依靠主機(jī)的諸如TCP/IP協(xié)議去收發(fā)數(shù)據(jù)包。這意味著它不能阻塞,不能處理同一臺(tái)主機(jī)中各程序之間的通信數(shù)據(jù)。它只能“嗅探”到物理線路上的數(shù)據(jù)報(bào)。因此它不適用于traffic shapers,QoS調(diào)度,以及個(gè)人防火墻。 nWinPcap包括三個(gè)部分n第一個(gè)模塊:內(nèi)核級(jí)的包過濾驅(qū)動(dòng)程序內(nèi)核級(jí)的包過濾驅(qū)動(dòng)程序 NPF(Netgroup Packet Filter),是一個(gè)虛擬設(shè)備驅(qū)動(dòng)程序文件, 是架構(gòu)的核心(在Win95/98 中是一個(gè)VXD文件,在NT/2000 中是一個(gè)SYS 文件) ,它的主要功
4、能是過濾數(shù)據(jù)包,在包上附加時(shí)間戳、數(shù)據(jù)包長度等信息。n第二個(gè)模塊:低級(jí)動(dòng)態(tài)鏈接庫低級(jí)動(dòng)態(tài)鏈接庫packet.dll,在Win32 平臺(tái)上提供了與NPF 的一個(gè)通用接口。 packet.dll數(shù)據(jù)包驅(qū)動(dòng)程序庫是與libpcap 相兼容的一組用戶級(jí)的函數(shù)庫。n第三個(gè)模塊:用戶級(jí)的用戶級(jí)的Wpcap.dll。通過調(diào)用packet.dll 提供的函數(shù)生成,它包括了過濾器生成等一系列可以被用戶級(jí)調(diào)用的高級(jí)函數(shù),另外還有諸如數(shù)據(jù)包統(tǒng)計(jì)及發(fā)送功能。 WinPcapWinPcap體系結(jié)構(gòu)NPFPacket.dllPacket.dll相關(guān)的數(shù)據(jù)結(jié)構(gòu)相關(guān)的數(shù)據(jù)結(jié)構(gòu) typedef struct typedef s
5、truct _ADAPTER _ADAPTER * *LPADAPTERLPADAPTER 描述一個(gè)網(wǎng)絡(luò)適配器。它包含了兩個(gè)域: HANDLE hFile TCHAR SymbolicLinkhFile是一個(gè)指向驅(qū)動(dòng)器句柄的指針。通過該句柄,我們可以直接與驅(qū)動(dòng)器進(jìn)行通信,如接收或發(fā)送數(shù)據(jù)包。SymbolicLink是一個(gè)字符串,它包含了當(dāng)前打開的網(wǎng)絡(luò)適配器的名稱。 Packet.dllPacket.dll相關(guān)的數(shù)據(jù)結(jié)構(gòu)相關(guān)的數(shù)據(jù)結(jié)構(gòu)typedef structtypedef struct _PACKET _PACKET * *LPPACKETLPPACKET 描述一組網(wǎng)絡(luò)數(shù)據(jù)包的結(jié)構(gòu)。它包含了
6、以下幾個(gè)域: OVERLAPPED OverLapped PVOID Buffer UINT Length PVOID ulBytesReceived BOOLEAN bIoComplete OverLapped是用來處理對(duì)驅(qū)動(dòng)器的異步調(diào)用。Buffer是用來指向緩存的指針,該緩存包含了數(shù)據(jù)包的數(shù)據(jù)。Length是該緩存區(qū)的大小。而ulBytesReceived表明了該緩存中包含的有效數(shù)據(jù)的大小。BIoComplete是在異步調(diào)用中用來表示該P(yáng)acket是否包含有效的數(shù)據(jù)。 Packet.dllPacket.dll相關(guān)的數(shù)據(jù)結(jié)構(gòu)相關(guān)的數(shù)據(jù)結(jié)構(gòu)struct bpf_hdrstruct bpf_h
7、dr 數(shù)據(jù)報(bào)頭部。它包含以下幾個(gè)域:nstruct timeval bh_tstampnUNIT bh_caplennUNIT bh_datalennUSHORT bh_hdrlen bh_tstamp是一個(gè)時(shí)間戳,它包含兩個(gè)域:tv_sec和tv_usec,用來表示報(bào)文的捕獲時(shí)間。bh_caplen是封裝報(bào)文后的報(bào)文長度。bh_datalen是原始報(bào)文長度。bh_hdrlen是封裝報(bào)文的報(bào)頭長度。 Packet.dllPacket.dll相關(guān)的數(shù)據(jù)結(jié)構(gòu)相關(guān)的數(shù)據(jù)結(jié)構(gòu) typedef struct NetType NetTypetypedef struct NetType NetType 描述
8、網(wǎng)絡(luò)類型的數(shù)據(jù)結(jié)構(gòu)。 typedef struct npf_if_addr npf_if_addrtypedef struct npf_if_addr npf_if_addr 描述一個(gè)網(wǎng)絡(luò)適配器的ip地址。 Struct bpf_statStruct bpf_stat 當(dāng)前捕獲數(shù)據(jù)報(bào)的統(tǒng)計(jì)信息Packet.dll相關(guān)函數(shù) 1 LPPACKET PacketAllocatePacket(void) 如果運(yùn)行成功,返回一個(gè)_PACKET結(jié)構(gòu)的指針,否則返回NULL。成功返回的結(jié)果將會(huì)傳送到PacketReceivePacket()函數(shù),接收來自驅(qū)動(dòng)的網(wǎng)絡(luò)數(shù)據(jù)報(bào)。2 VOID PacketFreeP
9、acket(LPPACKET lpPacket) 釋放參數(shù)提供的_PACKET結(jié)構(gòu)。 3 VOID PacketCloseAdapter(LPADAPTER lpAdapter) 關(guān)閉參數(shù)中提供的網(wǎng)絡(luò)適配器,釋放相關(guān)的ADAPTER結(jié)構(gòu)。Packet.dll相關(guān)函數(shù)4 BOOLEAN PacketGetAdapterNames(LPSTR pStr,PULONG BufferSize) 返回可以得到的網(wǎng)絡(luò)適配器列表及描述。5 BOOLEAN PacketGetNetInfoEx(LPTSTR AdapterNames,npf_ip_addr *buff, PLONG NEntries) 返回某
10、個(gè)網(wǎng)絡(luò)適配器的全面地址信息。 其中npf_ip_addr結(jié)構(gòu)包含: IPAddress: ip地址 SubnetMask: 子網(wǎng)掩碼 Broadcast: 廣播地址 Packet.dll相關(guān)函數(shù) 6 BOOLEAN PacketGetNetType(LPADAPTER AdapterObject, NetType *type) 返回某個(gè)網(wǎng)絡(luò)適配器的MAC類型。 NetType結(jié)構(gòu)里包含了LinkSpeed(速度)和LinkType(類型)。其中LinkType包含以下幾種情況: NdisMedium802_3: Ethernet(802.3) NdisMediumWan: WAN NdisMe
11、dium802_5: Token Ring(802.5) NdisMediumFddi: FDDI NdisMediumAtm: ATM NdisMediumArcnet878_2: ARCNET(878.2) Packet.dll相關(guān)函數(shù)7 BOOLEAN PacketGetStats(LPADAPTER AdapterObject,struct bpf_stat *s) 返回幾個(gè)關(guān)于當(dāng)前捕獲報(bào)告的統(tǒng)計(jì)信息。 其中bpf_stat結(jié)構(gòu)包含: bs_recv, bs_drop,ps_ifdrop,bs_capt bs_recv: 從網(wǎng)絡(luò)適配器開始捕獲數(shù)據(jù)報(bào)開始所接收到的所有數(shù)據(jù)報(bào)的數(shù)目,包括丟
12、失的數(shù)據(jù)報(bào); bs_drop: 丟失的數(shù)據(jù)報(bào)數(shù)目。8 PCHAR PacketGetVersion() 返回關(guān)于dll的版本信息。 Packet.dll相關(guān)函數(shù)9 VOID PacketInitPacket(LPPACKET lpPacket, PVOID Buffer, UINT Length) 初始化一個(gè)_PACKET結(jié)構(gòu)。10 LPADAPTER PacketOpenAdapter(LPTSTR AdapterName) 打開一個(gè)網(wǎng)絡(luò)適配器。11 BOOLEAN PacketReceivePacket(LPADAPTER AdapterObject,LPPACKET lpPacket,B
13、OOLEAN Sync) 從NPF驅(qū)動(dòng)程序讀取網(wǎng)絡(luò)數(shù)據(jù)報(bào)及統(tǒng)計(jì)信息。 數(shù)據(jù)報(bào)編碼結(jié)構(gòu): |bpf_hdr|data|Padding|bpf_hdr|data|Padding|Packet.dll相關(guān)函數(shù)12 BOOLEAN PacketSendPacket(LPADAPTER AdapterObject,LPPACKET lpPacket, BOOLEAN Sync) 發(fā)送一個(gè)或多個(gè)數(shù)據(jù)報(bào)的副本。13 BOOLEAN PacketSetBuff(LPADAPTER AdapterObject,int dim) 設(shè)置捕獲數(shù)據(jù)報(bào)的內(nèi)核級(jí)緩沖區(qū)大小。Packet.dll相關(guān)函數(shù)14 BOOLEAN
14、PacketSetHwFilter(LPADAPTER AdapterObject,ULONG Filter)為接收到的數(shù)據(jù)報(bào)設(shè)置硬件過濾規(guī)則。 以下為一些典型的過濾規(guī)則: NDIS_PACKET_TYPE_PROMISCUOUS: 設(shè)置為混雜模式,接收所有流過的數(shù)據(jù)報(bào); NDIS_PACKET_TYPE_DIRECTED: 只有目的地為本地主機(jī)網(wǎng)絡(luò)適配器的數(shù)據(jù)報(bào)才會(huì)被接收; NDIS_PACKET_TYPE_BROADCAST: 只有廣播數(shù)據(jù)報(bào)才會(huì)被接收; NDIS_PACKET_TYPE_MULTICAST: 只有與本地主機(jī)網(wǎng)絡(luò)適配器相對(duì)應(yīng)的多播數(shù)據(jù)報(bào)才會(huì)被接收; NDIS_PACKET_
15、TYPE_ALL_MULTICAST: 所有多播數(shù)據(jù)報(bào)均被接收; NDIS_PACKET_TYPE_ALL_LOCAL: 所有本地?cái)?shù)據(jù)報(bào)均被接收。Packet.dll相關(guān)函數(shù)15 BOOLEAN PacketSetNumWrites(LPADAPTER AdapterObject,int nwrites) 設(shè)置調(diào)用PacketSendPacket()函數(shù)發(fā)送一個(gè)數(shù)據(jù)報(bào)副本的最大重發(fā)次數(shù)。16 BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout) 設(shè)置讀操作等待時(shí)間 。以上介紹的包含了packet.dll里的大部分函數(shù)
16、。如果想更深層的了解winpcap,請(qǐng)?jiān)L問相關(guān)網(wǎng)站,主頁地址: http:/winpcap.polito.itPacket.dll監(jiān)聽流程圖PacketGetAdapterName() 選擇網(wǎng)卡選擇網(wǎng)卡PacketOpenAdapter() 打開網(wǎng)絡(luò)適配器打開網(wǎng)絡(luò)適配器PacketSetHwFilter() 設(shè)置接收模式(一般設(shè)置為混雜模式)設(shè)置接收模式(一般設(shè)置為混雜模式)PacketSetBpf() 編輯設(shè)置過濾規(guī)則編輯設(shè)置過濾規(guī)則PacketSetBuff() 設(shè)置核心緩沖區(qū)大小設(shè)置核心緩沖區(qū)大小PacketSetReadTimeout() 設(shè)置讀操作等待時(shí)間設(shè)置讀操作等待時(shí)間Packe
17、tAllocatePacket() 設(shè)置(分配)用戶緩沖區(qū)設(shè)置(分配)用戶緩沖區(qū)PacketInitPacket() 初始化用戶緩沖區(qū)初始化用戶緩沖區(qū)PacketReceivePacket() 捕獲網(wǎng)絡(luò)數(shù)據(jù)包捕獲網(wǎng)絡(luò)數(shù)據(jù)包Packet.dll應(yīng)用步驟基本程序代碼如下:if ( ! ( dwVersion = 0X80000000 & dwWindowsMajorVersion = 4) ) / / Windows NTAdapterLength = sizeof (AdapterName) ;(1)得到網(wǎng)卡名稱if ( PacketGetAdapterNames ( ( PTSTR )
18、 AdapterName ,&AdapterLength) = = FALSE)return FALSE; Packet.dll應(yīng)用步驟2) 打開指定的網(wǎng)卡lpAdapter = PacketOpenAdapter(AdapterList 0 ) ;if ( ! lpAdapter | | (lpAdapter - hFile = = INVALID_HANDLE_VALUE) )dwErrorCode = GetLastError() ;sprintf ( szErr ,Unable to open the adapter ,error code : %lx,dwErrorCode)
19、 ;AfxMessageBox(szErr) ;return FALSE;Packet.dll應(yīng)用步驟3) 設(shè)置過濾器,將網(wǎng)卡設(shè)置為混雜模式,這樣可以監(jiān)聽流過本機(jī)的數(shù)據(jù)包if ( PacketSetHwFilter ( lpAdapter ,NDIS_PACKET_TYPE_PROMISCUOUS) = = FALSE)return FALSE;4) 設(shè)置緩沖區(qū)大小if (PacketSetBuff (lpAdapter ,512000) = = FALSE)return FALSE;5) 設(shè)置接收一個(gè)數(shù)據(jù)包的超時(shí)時(shí)間PacketSetReadTimeout ( lpAdapter , 100
20、0) / / set a 1 second read timeout Packet.dll應(yīng)用步驟6) 為Packet 結(jié)構(gòu)分配內(nèi)存if ( (lpPacket = PacketAllocatePacket() ) = = NULL)return false ;7) 初始化一個(gè)Packet 結(jié)構(gòu),即將Packet 結(jié)構(gòu)中的buffer 設(shè)置為傳遞的buffer 指針.PacketInitPacket (lpPacket , (char 3 ) buffer ,256000)Packet.dll應(yīng)用步驟8) 從NPF driver 上讀取網(wǎng)絡(luò)數(shù)據(jù)包.while ( ! bStop)if ( Pa
21、cketReceivePacket ( lpAdapter , lpPacket , TRUE) = =FALSE)return FALSE; / / 顯示捕獲數(shù)據(jù)9) 釋放參數(shù)提供的Packet 結(jié)構(gòu).PacketFreePacket (lpPacket)10) 關(guān)閉網(wǎng)卡.PacketCloseAdapter(lpAdapter) wpcap.dll庫函數(shù)介紹 nwpcap.dll為包捕獲應(yīng)用提供了一個(gè)高級(jí)的編程接口,它是從Libpcap發(fā)展而來并且相互兼容,所以wpcap.dll包含了Libpcap具有的函數(shù)。另外,由于它還增加了數(shù)據(jù)包發(fā)送和統(tǒng)計(jì)等功能,為此增加了以下的函數(shù):pcap_se
22、tbuff:該函數(shù)用于設(shè)置包驅(qū)動(dòng)器緩沖區(qū)的大小,一個(gè)適合大小的緩沖區(qū)不僅可以減少丟包率,還可以提供包捕獲能力。pcap_setmode:該函數(shù)把網(wǎng)絡(luò)適配器設(shè)置為統(tǒng)計(jì)方式。pcap_stats:這個(gè)函數(shù)用于獲取包捕獲過程的統(tǒng)計(jì)數(shù)據(jù)。 Wpcap為了要與硬件接口,還直接調(diào)用了packet.dll提供的函數(shù)。 wpcap.dll的相關(guān)數(shù)據(jù)結(jié)構(gòu) 接口地址:struct pcap_addr struct pcap_addr *next; /*指到鏈表的下一個(gè)結(jié)點(diǎn)*/ struct sockaddr *addr; /*指到sockaddr類型的結(jié)構(gòu)*/ struct sockaddr *netmask;
23、/*指到addr相應(yīng)的掩碼*/ struct sockaddr *broadaddr; /*addr相應(yīng)的廣播地址*/ struct sockaddr *dstaddr; /*與addr對(duì)應(yīng)的目標(biāo)地址, 如非點(diǎn)到點(diǎn),則為NULL*/ ; wpcap.dll的相關(guān)數(shù)據(jù)結(jié)構(gòu)libpcap dump文件的頭結(jié)構(gòu):struct pcap_file_header bpf_u_int32 magic;/*/ u_short version_major;/*主版本號(hào)*/ u_short version_minor;/*次版本號(hào)*/ bpf_int32 thiszone;/*本地時(shí)間*/ bpf_u_int3
24、2 sigfigs;/*時(shí)間戳*/ bpf_u_int32 snaplen;/*保存一個(gè)包中多大的數(shù)據(jù)*/ bpf_u_int32 linktype;/*數(shù)據(jù)鏈路類型*/;wpcap.dll的相關(guān)數(shù)據(jù)結(jié)構(gòu)接口數(shù)據(jù)結(jié)構(gòu):struct pcap_if struct pcap_if *next; /*本鏈下一個(gè)結(jié)點(diǎn)*/ char *name; /*設(shè)備名稱*/ char *description;/*描述*/ struct pcap_addr *addresses; u_int flags;/*如是一個(gè)回路接口, 則設(shè)成PCAP_IF_LOOPBACK */; wpcap.dll的相關(guān)數(shù)據(jù)結(jié)構(gòu)dum
25、p file中包的頭結(jié)構(gòu):struct pcap_pkthdr struct timeval ts;/*時(shí)間戳*/ bpf_u_int32 caplen;/*長度*/bpf_u_int32 len;/*捕獲包的長度*/; wpcap.dll的相關(guān)數(shù)據(jù)結(jié)構(gòu)統(tǒng)計(jì)數(shù)據(jù)結(jié)構(gòu):struct pcap_stat u_int ps_recv;/*網(wǎng)上已傳送的包數(shù)*/u_int ps_drop; /*丟棄的包數(shù)*/u_int ps_ifdrop;/*接口拒絕的包數(shù),暫不支持*/#ifdef WIN32 u_int bs_capt;/*Win32專用,捕獲的包數(shù)*/#endif /* WIN32 */; wpc
26、ap.dll主要函數(shù)(1)Int pcap_findalldevs(pcap_if_t * alldevsp, char * errbuf)功能:返回本機(jī)所有的網(wǎng)絡(luò)接口設(shè)備。輸入?yún)?shù):兩個(gè)參數(shù)全為空值返回: 失?。悍祷?1,errbuf中包含錯(cuò)誤信息。 成功:alldevsp中包含全部網(wǎng)絡(luò)接口設(shè)備。當(dāng)用戶無法了解自己機(jī)器的接口設(shè)備時(shí)在程序的首部調(diào)用該函數(shù)。(2)Char *pcat_lookupdev(char *errbuf) 該函數(shù)用于返回可被pcap_open_live()或pcap_lookupnet()函數(shù)調(diào)用的網(wǎng)絡(luò)設(shè)備名(一個(gè)字符串指針)。如果函數(shù)出錯(cuò),則返回NULL,同時(shí)errb
27、uf中存放相關(guān)的錯(cuò)誤消息。 wpcap.dll主要函數(shù)(3)int pcap_lookupnet(char *device, bpf_u_int32 *netp,bpf_u_int32 *maskp, char *errbuf) 獲得指定網(wǎng)絡(luò)設(shè)備的IP地址和掩碼。netp參數(shù)和maskp參數(shù)都是bpf_u_int32指針。如果函數(shù)出錯(cuò),則返回-1,同時(shí)errbuf中存放相關(guān)的錯(cuò)誤消息。 (4)Pcap_dumper_t *pcap_dump_open(pcap_t *p,char *filename) 打開一個(gè)保存數(shù)據(jù)包的文件,其文件格式是固定的,和tcpdump等文件格式相兼容。wpcap.
28、dll主要函數(shù)(5)Pcap_t * pcap_open_live(char * DeviceName,int snaplen,int promisc,int to_ms,char *errbuf)功能:打開一個(gè)捕獲接口設(shè)備。輸入?yún)?shù): DeviceName:設(shè)備名; snaplen:一個(gè)包中截取的字節(jié)數(shù); promisc:1雜湊模式,0正常模式; to_ms:時(shí)延(毫稱);errbuf:錯(cuò)誤信息返回:失敗:返回非正數(shù),errbuf中包含錯(cuò)誤信息。成功:捕獲句柄。wpcap.dll主要函數(shù)(6)int pcap_compile (pcap_t *p, struct bpf_program *f
29、p, char *str, int optimize, bpf_u_int32 netmask)功能:編譯過濾規(guī)則輸入?yún)?shù): Str規(guī)則串; optimize是否優(yōu)化;返回: 失?。悍祷?1。 成功:捕獲句柄wpcap.dll主要函數(shù)(7)int pcap_setfilter (pcap_t *p, struct bpf_program *fp)功能:設(shè)置過濾器規(guī)則輸入?yún)?shù): fp為指到結(jié)構(gòu)體 bpf_program 的指針, pcap_compile()函數(shù)的返回值。返回: 失敗:返回-1。wpcap.dll主要函數(shù)(8)int pcap_dispatch(pcap_t *p, int cn
30、t,pcap_handler callback, u_char *user) 捕獲并處理數(shù)據(jù)包。cnt參數(shù)指定函數(shù)返回前所處理數(shù)據(jù)包的最大值。cnt=-1表示在一個(gè)緩沖區(qū)中處理所有的數(shù)據(jù)包。cnt=0表示處理所有數(shù)據(jù)包,直到產(chǎn)生以下錯(cuò)誤之一:讀取到EOF;超時(shí)讀取。 callback參數(shù)指定一個(gè)帶有三個(gè)參數(shù)的回調(diào)函數(shù),這三個(gè)參數(shù)為:typedef void ( *pcap_handler ) ( u_char *agrs, const struct pcap_pkthdr *header, const u_char *packet ); 其中agrs是從pcap_dispatch()函數(shù)傳遞過
31、來的第四個(gè)形參 ,一般我們自己的包捕捉程序不需要提供它,總是為NULL ;header指向pcap_pkthdr結(jié)構(gòu),該結(jié)構(gòu)位于真正的物理幀前面,用于消除不同鏈路層支持的差異 ;packet指向所捕獲報(bào)文的物理幀。 參數(shù)user 為用戶傳遞給回調(diào)函數(shù)的指針。如果成功則返回讀取到的字節(jié)數(shù)。讀取到EOF時(shí)則返回零值。出錯(cuò)時(shí)則返回-1,此時(shí)可調(diào)用pcap_perror()或pcap_geterr()函數(shù)獲取錯(cuò)誤消息。 wpcap.dll主要函數(shù)(9)Int pcap_loop (pcap_t *p, int cnt, pcap_handler callback, u_char *user) 功能:循
32、環(huán)抓取網(wǎng)絡(luò)數(shù)據(jù)報(bào)文。每捕獲到cnt個(gè)報(bào)文就調(diào)用callback用戶函數(shù)。 輸入?yún)?shù):P句柄,cnt每一次抓包數(shù),callback用戶自定義的處理函數(shù),user一般為null。 注:該函數(shù)功能基本與pcap_dispatch()函數(shù)相同,只不過此函數(shù)在cnt個(gè)數(shù)據(jù)包被處理或出現(xiàn)錯(cuò)誤時(shí)才返回,但讀取超時(shí)不會(huì)返回。而如果為pcap_open_live()函數(shù)指定了一個(gè)非零值的超時(shí)設(shè)置,然后調(diào)用pcap_dispatch()函數(shù),則當(dāng)超時(shí)發(fā)生時(shí)pcap_dispatch()函數(shù)會(huì)返回。cnt參數(shù)為負(fù)值時(shí)pcap_loop()函數(shù)將始終循環(huán)運(yùn)行,除非出現(xiàn)錯(cuò)誤wpcap.dll主要函數(shù)(10) pcap_
33、read() 這個(gè)函數(shù)從包捕獲驅(qū)動(dòng)器中讀取一組數(shù)據(jù)包并針對(duì)每一個(gè)包運(yùn)行包過濾程序,然后把過濾后的數(shù)據(jù)送應(yīng)用程序緩沖器u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h) 返回指向下一個(gè)數(shù)據(jù)包的u_char指針。 (11)void pcap_close (pcap_t *p)功能:關(guān)閉庫。輸入?yún)?shù):P句柄。(12)Int pcap_setbuff(pcap_t *p,int dim) 用來設(shè)置核心層的緩沖區(qū)。(13)Int pcap_setmode(pcap_t *p,int mode) 用來設(shè)置網(wǎng)卡的工作模式:混雜/非混雜。(14)pcap_s
34、tats():這個(gè)函數(shù)用于獲取包捕獲過程的統(tǒng)計(jì)數(shù)據(jù)。(15)Int pcap_sendpacket(pcap_t *p,char *buf,int size) 用來發(fā)送數(shù)據(jù)包。(16)FILE *pcap_file(pcap_t *p) 返回被打開文件的文件名。 (17)int pcap_fileno(pcap_t *p) 返回被打開文件的文件描述字號(hào)碼wpcap.dll捕獲數(shù)據(jù)包的調(diào)用流程 Pcap_close:關(guān)閉庫Pcap_lookupdev:返回設(shè)備類型Pcap_open_live/pcap_open_offline:打開設(shè)備或文件準(zhǔn)備記取數(shù)據(jù)Pcap_compile:編譯過濾規(guī)則Pc
35、ap_setfilter:設(shè)備過濾規(guī)則Pcap_loop:循環(huán)抓取網(wǎng)絡(luò)數(shù)據(jù)報(bào)文wpcap.dll捕獲數(shù)據(jù)包的調(diào)用流程n首先調(diào)用pcap_lookupdev(char * errbuf) 函數(shù)獲得主機(jī)上的網(wǎng)絡(luò)設(shè)備,該函數(shù)返回一個(gè)指向主機(jī)上的網(wǎng)絡(luò)設(shè)備(如網(wǎng)卡) 的指針;然后調(diào)用pcap_open_live (char * device , int snaplen , int promisc , int to_ms , char * ebuf) 函數(shù)打開一個(gè)網(wǎng)絡(luò)設(shè)備, 該函數(shù)返回一個(gè)包捕獲描述符pcap_t。其中, device 是要打開的網(wǎng)絡(luò)設(shè)備字符串, snaplen 設(shè)定捕獲的包的最大長度,
36、promisc 確定接口是否被設(shè)為promiscuous(混雜)模式。在網(wǎng)絡(luò)監(jiān)視儀系統(tǒng)中,此參數(shù)設(shè)為promiscuous模式,以捕捉本地網(wǎng)絡(luò)上的所有包。To_ms 設(shè)定讀超時(shí)的毫秒數(shù), ebuf 用來返回錯(cuò)誤文本。wpcap.dll捕獲數(shù)據(jù)包的調(diào)用流程n然后調(diào)用int pcap_compile (pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask)來編譯過濾規(guī)則,用int pcap_setfilter (pcap_t *p, struct bpf_program *fp)來設(shè)置過濾器規(guī)則。n接下來用pcap_loop (pcap_t* p , int cnt , pcap_handler callback , u_char * user) 或pcap_next (pcap_t * p , struct pcap_pkthdr *h)函數(shù)捕獲網(wǎng)絡(luò)上所有的數(shù)據(jù)包給應(yīng)用程序作分析用。n最后用void pcap_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 5-氯水楊醛-2-氨基甲基苯并咪唑血管堿與銅的晶體結(jié)構(gòu)及其與DNA和BSA的相互作用
- 2025年中職食品加工工藝(食品生產(chǎn)技術(shù))試題及答案
- 八年級(jí)地理(自然資源)2027年下學(xué)期期末測(cè)試卷
- 2025年大學(xué)大三(能源化學(xué)工程)新能源材料基礎(chǔ)試題及答案
- 中職第二學(xué)年(模具設(shè)計(jì))模具CAD應(yīng)用2026年階段測(cè)試題及答案
- 2025年大學(xué)大四(漢語言文學(xué))綜合應(yīng)用測(cè)試卷
- 六年級(jí)語文(升學(xué)備考)2026年上學(xué)期期末測(cè)試卷
- 2025年中職數(shù)字媒體藝術(shù)設(shè)計(jì)(媒體設(shè)計(jì))試題及答案
- 2025年高職建筑安全技術(shù)與管理(建筑安全方案)期末試題
- 2026年素質(zhì)教育(素質(zhì)培養(yǎng))考題及答案
- 中醫(yī)護(hù)理工作制度
- 職業(yè)教育教師教學(xué)創(chuàng)新團(tuán)隊(duì)建設(shè)
- 《Photoshop CC 視覺設(shè)計(jì)案例教程》課件-第3章 圖層的概念及應(yīng)用
- 2025年低碳供熱技術(shù)價(jià)格機(jī)制研究報(bào)告-以居民熱價(jià)為例-自然資源保護(hù)協(xié)會(huì)
- 快遞網(wǎng)點(diǎn)裝修實(shí)施方案
- 鄂倫春旗政務(wù)服務(wù)中心綜合窗口工作人員招聘?jìng)淇伎荚囶}庫附答案解析
- 裝載機(jī)管理辦法及制度
- 地鐵保安考試題庫及答案
- 中醫(yī)基礎(chǔ)學(xué)考試題(附答案)
- 六分鐘步行試驗(yàn)臨床規(guī)范應(yīng)用中國專家共識(shí)解讀
- 2025一建《港口航道》真題及答案
評(píng)論
0/150
提交評(píng)論