#include<pcap.h>
#include<String.h>
/*以下是以太网协议格式的定义*/
struct ether_header
{
u_int8_t ether_dhost[6]; /*目的以太网地址*/
u_int8_t ether_shost[6]; /*源以太网地址*/
u_int16_t ether_type; /*以太网类型*/
};
/*下面是ARP协议格式的定义*/
struct arp_header
{
u_int16_t arp_hardware_type; /*硬件类型*/
u_int16_t arp_protocol_type; /*协议类型*/
u_int8_t arp_hardware_length; /*硬件地址类型*/
u_int8_t arp_protocol_length; /*协议地址长度*/
u_int16_t arp_operation_code; /*操作吗*/
u_int8_t arp_source_ethernet_address[6]; /*源以太网地址*/
u_int8_t arp_source_ip_address[4]; /*源ip地址*/
u_int8_t arp_destination_ethernet_address[6]; /*目的以太网地址*/
u_int8_t arp_destination_ip_address[4]; /*目的Ip地址*/
};
/*下面是IP协议格式的定义*/
struct ip_header
{
#if defined(WORDS_BIGENDIAN)
u_int8_t ip_version:4,
ip_header_length:4;
#else
u_int8_t ip_header_length:4,ip_version:4;
#endif
u_int8_t ip_tos; /*服务质量*/
u_int16_t ip_length; /*长度*/
u_int16_t ip_id; /*标识*/
u_int16_t ip_off; /*偏移*/
u_int8_t ip_ttl; /*生存时间*/
u_int8_t ip_protocol; /*协议类型*/
u_int16_t ip_checksum; /*校验和*/
struct in_addr ip_souce_address; /*源Ip地址*/
struct in_addr ip_destination_address; /*目的Ip地址*/
};
/*下面是UDP协议格式定义*/
struct udp_header
{
u_int16_t udp_source_port; /*源端口号*/
u_int16_t udp_destination_port; /*目的端口号*/
u_int16_t udp_length; /*长度*/
u_int16_t udp_checksum; /*校验和*/
};
/*下面是TCP协议格式的定义*/
struct tcp_header
{
u_int16_t tcp_source_port; /*源端口号*/
u_int16_t tcp_destination_port; /*目的端口号*/
u_int32_t tcp_sequence_lliiuuwweennttaaoo; /*序列号*/
u_int32_t tcp_acknowledgement; /*确认序列号*/
#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; /*紧急指针*/
};
/*下面是ICMP协议格式的定义*/
struct icmp_header
{
u_int8_t icmp_type; /*ICMP类型*/
u_int8_t icmp_code; /*ICMP代码*/
u_int16_t icmp_checksum; /*校验和*/
u_int16_t icmp_id; /*标识符*/
u_int16_t icmp_sequence; /*序列码*/
};
/*以下是分析HTTP协议的函数,其定义方式与回调函数相同*/
void http_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr*
packet_header,const u_char* packet_content)
{
struct tcp_header * tcp_protocol = (struct tcp_header *) (packet_content+14+20);
bool find_http = false;
string http_txt = "";
char* ip_pkt_data = (char*)ih;
for(int i=0;i<ip_len;++i){
//check the http request
if(!find_http && (i+3<ip_len && strncmp(ip_pkt_data+i,"GET ",strlen("GET ")) ==0 )
|| (i+4<ip_len && strncmp(ip_pkt_data+i,"POST ",strlen("POST ")) == 0) ){
find_http = true;
}
//check the http response
if(!find_http && i+8<ip_len && strncmp(ip_pkt_data+i,"HTTP/1.1 ",strlen("HTTP/1.1 "))==0){
find_http = true;
}
//collect the http text
if(find_http && is_readable(ip_pkt_data[i])){
http_txt += ip_pkt_data[i];
}
}
//print the http request or response
if(http_txt != ""){
cout<<http_txt;
cout<<endl<<"***********************************************************"<<endl<<endl;
}
}
}
/*以下是分析SMTP协议的函数,其定义方式与回调函数相同*/
void smtp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr*
packet_header,const u_char* packet_content)
{
}
/*以下是分析FTP协议的函数,其定义方式与回调函数相同*/
void ftp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr*
packet_header,const u_char* packet_content)
{
}
/* 下面是分析TCP协议的函数,其定义方式与回调函数相同*/
void tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const u_char * packet_content)
{
struct tcp_header * tcp_protocol; /*TCP协议变量*/
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协议内容*/
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_sequence_lliiuuwweennttaaoo); /*序列码*/
acknowledgement = ntohl(tcp_protocol->tcp_acknowledgement); /*确认序列码*/
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("------- TCP协议 -------\n");
printf("源端口号:%d\n",source_port);
printf("目的端口号:%d\n",destination_port);
switch (destination_port)
{
case 80:
printf("上层协议为HTTP协议\n");
break;
case 21:
printf("上层协议为FTP协议\n");
break;
case 23:
printf("上层协议为TELNET协议\n");
break;
case 25:
printf("上层协议为SMTP协议\n");
break;
case 110:
printf("上层协议为POP3协议\n");
break;
default:
break;
}
printf("序列号:%u\n",sequence);
printf("确认号:%u\n",acknowledgement);
printf("首部长度:%d\n",header_length);
printf("保留:%d\n",tcp_protocol->tcp_reserved);
printf("标记:");
if(flags & 0x08)
printf("PSH");
if(flags & 0x10)
printf("ACK");
if(flags & 0x02)
printf("SYN");
if(flags & 0x20)
printf("URG");
if(flags & 0x01)
printf("FIN");
if(flags & 0x04)
printf("RST");
printf("\n");
printf("窗口大小:%d\n",windows);
printf("校验和:%d\n",checksum);
printf("紧急指针:%d\n",urgent_pointer);
switch (destination_port)
{
case 80:
http_protocol_packet_callback(argument,packet_header,packet_content);
break;
/*case 21:
printf("上层协议为FTP协议\n");
break;
case 23:
printf("上层协议为TELNET协议\n");
break;
case 25:
printf("上层协议为SMTP协议\n");
break;
case 110:
printf("上层协议为POP3协议\n");
break;*/
default:
break;
}
}
/*下面是实现UDP协议分析的函数,函数类型与回调函数相同*/
void udp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr* packet_header,const u_char* packet_content)
{
struct udp_header *udp_protocol; /*UDP协议类型*/
u_short source_port; /*源端口号*/
u_short destination_port; /*目的端口号*/
u_short length;
udp_protocol = (struct udp_header *) (packet_content+14+20); /*获得UDP协议内容*/
source_port = ntohs(udp_protocol->udp_source_port); /*获得源端口号*/
destination_port = ntohs(udp_protocol->udp_destination_port); /*获得目的端口*/
length = ntohs(udp_protocol->udp_length); /*获得长度*/
printf("------- UDP协议 -------\n");
printf("源端口号:%d\n",destination_port);
switch (destination_port)
{
case 138:
printf("上层协议为NetBIOS数据报服务\n");
break;
case 137:
printf("上层协议为NetBIOS名字服务\n");
break;
case 139:
printf("上层协议为NetBIOS会话服务\n");
break;
case 53:
printf("上层协议为域名服务\n");
break;
default:
break;
}
printf("长度:%d\n",length);
printf("校验和:%d\n",ntohs(udp_protocol->udp_checksum));
}
/*下面是实现分析ICMP协议的函数,函数类型与回调函数相同*/
void icmp_protocol_pack
没有合适的资源?快使用搜索试试~ 我知道了~
winpcap抓取tcp等包
共60个文件
tlog:39个
manifest:2个
pdb:2个
2星 需积分: 23 25 下载量 46 浏览量
2014-04-09
14:42:56
上传
评论 1
收藏 11.53MB RAR 举报
温馨提示
使用winpcap抓取各种包,例如tcp,ip,udp,icmp,Mac,ARP等
资源推荐
资源详情
资源评论
收起资源包目录
Winpcapxulu.rar (60个子文件)
Winpcapxulu
Winpcapxulu.suo 12KB
Winpcapxulu.sdf 24.89MB
ipch
winpcapxulu-27dbe8c2
winpcapxulu-ecb1952c.ipch 32.5MB
Winpcapxulu
Winpcapxulu.vcxproj.filters 942B
Winpcapxulu.vcxproj.user 143B
Winpcapxulu.vcxproj 4KB
a.cpp 16KB
Debug
vc100.idb 419KB
link.5636-cvtres.write.1.tlog 2B
link.212.write.1.tlog 2B
link.5484-cvtres.write.1.tlog 2B
link.4292.write.1.tlog 2B
link.1528.write.1.tlog 2B
CL.write.1.tlog 534B
link.5484.write.1.tlog 2B
CL.read.1.tlog 16KB
mt.read.1.tlog 474B
rc.write.1.tlog 454B
link.212-cvtres.write.1.tlog 2B
link.4292-cvtres.read.1.tlog 2B
link.4292-cvtres.write.1.tlog 2B
rc.read.1.tlog 446B
Winpcapxulu.lastbuildstate 91B
link.1528-cvtres.write.1.tlog 2B
link.5636-cvtres.read.1.tlog 2B
mt.command.1.tlog 478B
Winpcapxulu_manifest.rc 212B
cl.command.1.tlog 826B
link-cvtres.read.1.tlog 2B
link.5192-cvtres.read.1.tlog 2B
link.5192-cvtres.write.1.tlog 2B
link.5484-cvtres.read.1.tlog 2B
link.write.1.tlog 1KB
a.obj 60KB
link.212-cvtres.read.1.tlog 2B
link.5192.write.1.tlog 2B
link.1528.read.1.tlog 2B
Winpcapxulu.exe.intermediate.manifest 381B
link-cvtres.write.1.tlog 2B
link.4292.read.1.tlog 2B
link.command.1.tlog 2KB
rc.command.1.tlog 708B
link.read.1.tlog 4KB
link.5192.read.1.tlog 2B
link.5636.write.1.tlog 2B
mt.write.1.tlog 474B
Winpcapxulu.write.1.tlog 0B
Winpcapxulu.exe.embed.manifest.res 472B
link.212.read.1.tlog 2B
Winpcapxulu.vcxprojResolveAssemblyReference.cache 713B
Winpcapxulu.exe.embed.manifest 406B
link.5636.read.1.tlog 2B
Winpcapxulu.log 3KB
link.5484.read.1.tlog 2B
link.1528-cvtres.read.1.tlog 2B
vc100.pdb 124KB
Debug
Winpcapxulu.ilk 355KB
Winpcapxulu.pdb 531KB
Winpcapxulu.exe 37KB
Winpcapxulu.sln 900B
共 60 条
- 1
资源评论
- svsefrb2014-04-28连界面都没有
- sndscbdjf2014-08-14太简单了,基本就是api调用展示。
u010091237
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- htmlzwbjq_downyi.com.zip
- 无头单向非循环链表的实现(Test.c)
- 无头单向非循环链表的实现(SList.c)
- 浏览器重定向插件更新文件
- SSA-BP麻雀算法优化BP神经网络多特征分类预测(Matlab实现完整源码和数据)
- 粒子群算法优化BP神经网络PSO-BP的MATLAB代码(数值预测)
- 基于Springboot的一起看书平台.zip
- 无头单向非循环链表的实现(SList.h)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功