資源簡介
基于C++和winpcap編寫的網(wǎng)絡程序,實現(xiàn)監(jiān)聽并解析IP數(shù)據(jù)包!
運行程序,按提示輸入要選擇的網(wǎng)卡序列,再次輸入需要不活的IP數(shù)據(jù)包的個數(shù),然后程序自動運行捕獲。
捕獲后開始解析,從數(shù)據(jù)鏈路層開始解析,
1) 如果網(wǎng)絡層協(xié)議是IP協(xié)議,則開始解析網(wǎng)絡層IP數(shù)據(jù)包。
2) 如果運輸層協(xié)議是TCP協(xié)議則解析運輸層TCP數(shù)據(jù)包。
3) 如果網(wǎng)絡層協(xié)議是APP協(xié)議,則不在進一步解析網(wǎng)絡層數(shù)據(jù)包。
4) 如果運輸層協(xié)議是UDP協(xié)議,則不在進一步解析運輸層數(shù)據(jù)包。

代碼片段和文件信息
#include?
#include
#include?“pcap.h“
#include?“stdio.h“
#include
#include?
#include???//文件的輸入輸出;
#pragma?comment(lib“ws2_32.lib“)
#pragma?comment(lib“wpcap.lib“)
using?namespace?std;
/*下邊是以太網(wǎng)的協(xié)議格式?*/
struct?ethernet_header
?{?
u_int8_t?ether_dhost[6];??/*目的以太地址*/
u_int8_t?ether_shost[6];??/*源以太網(wǎng)地址*/
u_int16_t?ether_type;??????/*以太網(wǎng)類型*/
?};
/*ip地址格式*/
typedef?u_int32_t?in_addr_t;
struct?ip_header
?{
#ifdef?WORKS_BIGENDIAN
??u_int8_t?ip_version:4????/*version:4*/
???????ip_header_length:4;?/*IP協(xié)議首部長度Header?Length*/
#else
?u_int8_t?ip_header_length:4
???????ip_version:4;
#endif
?u_int8_t?ip_tos;?????????/*服務類型Differentiated?Services??Field*/
?u_int16_t?ip_length;??/*總長度Total?Length*/
?u_int16_t?ip_id;?????????/*標識identification*/
?u_int16_t?ip_off;????????/*片偏移*/
?u_int8_t?ip_ttl;????????????/*生存時間Time?To?Live*/
?u_int8_t?ip_protocol;????????/*協(xié)議類型(TCP或者UDP協(xié)議)*/
?u_int16_t?ip_checksum;??/*首部檢驗和*/
????????struct?in_addr??ip_source_address;?/*源IP*/
????????struct?in_addr??ip_destination_address;?/*目的IP*/
?};
/*關于tcp頭部的定義*/
struct?tcp_header
?{?
??u_int16_t?tcp_source_port; ??//源端口號
??
??u_int16_t?tcp_destination_port; //目的端口號
??
??u_int32_t?tcp_acknowledgement; //序號
??
??u_int32_t?tcp_ack; //確認號字段
?#ifdef?WORDS_BIGENDIAN
??u_int8_t?tcp_offset:4?
?????tcp_reserved:4;
?#else
??u_int8_t?tcp_reserved:4
?????tcp_offset:4;
?#endif
??u_int8_t?tcp_flags;
??u_int16_t?tcp_windows; //窗口字段
??u_int16_t?tcp_checksum; //檢驗和
??u_int16_t?tcp_urgent_pointer; //緊急指針字段
};
/*下邊實現(xiàn)tcp數(shù)據(jù)包分析的函數(shù)定義tcp_protocol_packet_callback*/
void?tcp_protocol_packet_callback(u_char?*argumentconst?struct?pcap_pkthdr*
packet_headerconst?u_char*?packet_content)
{
?struct?tcp_header?*tcp_protocol?;?????/*tcp協(xié)議變量*/
?u_char?flags; ??/*標記*/
?int?header_length; ??/*頭長度*/
?u_short?source_port; ???/*源端口*/
?u_short?destination_port;???/*目的端口*/
?u_short?windows; /*窗口大小*/
?u_short?urgent_pointer; ?/*緊急指針*/
?u_int?sequence; ?/*序列號*/
?u_int?acknowledgement;???/*確認號*/
?u_int16_t???checksum;???????/*檢驗和*/
?tcp_protocol=(struct?tcp_header?*)?(packet_content+14+20);??/*獲得tcp首部內(nèi)容*/
?source_port?=ntohs(tcp_protocol->tcp_source_port); ??/*獲得源端口號*/
?destination_port?=ntohs(tcp_protocol->tcp_destination_port);?/*獲得目的端口號*/
?header_length?=tcp_protocol->tcp_offset?*4; /*獲得首部長度*/
?sequence?=ntohl(tcp_protocol->tcp_acknowledgement); /*獲得序列號*/
?acknowledgement?=ntohl(tcp_protocol->tcp_ack);
?windows?=?ntohs(tcp_protocol->tcp_windows);
?urgent_pointer?=?ntohs(tcp_protocol->tcp_urgent_pointer);
?flags?=?tcp_protocol->tcp_flags;
?checksum?=ntohs?(tcp_protocol->tcp_checksum);
?printf(“\n========== 運輸層(TCP協(xié)議) ==========\n“);
?printf(“源端口:\t?%d\n“source_port);
?printf(“目的端口:\t?%d\n“destination_port);
?int?min=?(?destination_port? ?cout<<“應用層協(xié)議是:\t“;
?switch?(min)
???{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-01-01?20:31??解析IP數(shù)據(jù)包\
?????目錄???????????0??2019-01-01?20:31??解析IP數(shù)據(jù)包\Debug\
?????文件??????205824??2018-12-28?10:50??解析IP數(shù)據(jù)包\Debug\vc60.idb
?????文件??????143360??2018-12-28?10:50??解析IP數(shù)據(jù)包\Debug\vc60.pdb
?????文件??????553057??2018-12-28?10:50??解析IP數(shù)據(jù)包\Debug\解析IP數(shù)據(jù)包.exe
?????文件??????808332??2018-12-28?10:50??解析IP數(shù)據(jù)包\Debug\解析IP數(shù)據(jù)包.ilk
?????文件??????364721??2018-12-28?10:43??解析IP數(shù)據(jù)包\Debug\解析IP數(shù)據(jù)包.log
?????文件??????222617??2018-12-28?10:50??解析IP數(shù)據(jù)包\Debug\解析IP數(shù)據(jù)包.obj
?????文件?????5465812??2018-12-27?19:57??解析IP數(shù)據(jù)包\Debug\解析IP數(shù)據(jù)包.pch
?????文件?????1131520??2018-12-28?10:50??解析IP數(shù)據(jù)包\Debug\解析IP數(shù)據(jù)包.pdb
?????文件???????72616??2018-12-27?23:32??解析IP數(shù)據(jù)包\TCP_1995.jpg
?????文件???????49008??2018-12-27?23:32??解析IP數(shù)據(jù)包\UDP_2000.jpg
?????文件??????157493??2018-12-28?10:11??解析IP數(shù)據(jù)包\外網(wǎng).jpg
?????文件???????57558??2018-12-27?23:36??解析IP數(shù)據(jù)包\網(wǎng)絡層協(xié)議.jpg
?????文件???????10029??2018-12-28?11:58??解析IP數(shù)據(jù)包\解析IP數(shù)據(jù)包.cpp
?????文件????????3475??2018-12-28?10:50??解析IP數(shù)據(jù)包\解析IP數(shù)據(jù)包.dsp
?????文件?????????532??2018-12-28?11:23??解析IP數(shù)據(jù)包\解析IP數(shù)據(jù)包.dsw
?????文件??????111536??2018-12-27?23:34??解析IP數(shù)據(jù)包\解析IP數(shù)據(jù)包.jpg
?????文件???????41984??2018-12-28?11:23??解析IP數(shù)據(jù)包\解析IP數(shù)據(jù)包.ncb
?????文件???????48640??2018-12-28?11:23??解析IP數(shù)據(jù)包\解析IP數(shù)據(jù)包.opt
?????文件????????1211??2018-12-28?10:50??解析IP數(shù)據(jù)包\解析IP數(shù)據(jù)包.plg
評論
共有 條評論