HHaarrbbiinnIInnssttiittuutteeooffTTeecchhnnoollooggyyaattWWeeiihhaaiiWebMail解析作者:院系:计算机科学与技术班级:学号:指导老师:需要源程序的留下联系方式哈尔滨工业大学(威海)二零一二年六月2目录1.前言.............................................................................................................32.涉及的协议简介:....................................................................................32.1HTTP协议简介:.............................................................................32.2TCP/IP协议简介:..........................................................................43.程序设计思想:........................................................................................44.程序函数设计:........................................................................................55.webmail监控源程序...............................................................................56.相应截图及说明......................................................................................931.前言随着网络的发展和普及,浏览网页、QQ聊天、电子留言、电子邮件己经深入人们的生活。在众多的现代通信方式中,电子邮件(E-mail)己经成为了其中的重要组成部分。当电子邮件给人们带来极大便利的同时,也带来了一系列的不安全因素:有害信息的广泛传播、国家和企业机密的泄露等。为了控制和减少这些不安全因素的发生,需要建立一系列的安全机制。对传输内容的监控是较为重要的一种,在监控的过程中,对传输内容的还原又是最重要的一步。此次实验目的是捕获webmail的登录账号与密码等信息。2.涉及的协议简介:2.1HTTP协议简介:超文本传送协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到Web浏览器。HTML是一种用于创建文档的标记语言,这些文档包含到相关信息的链接。您可以单击一个链接来访问其它文档、图像或多媒体对象,并获得关于链接项的附加信息。HTTP工作在TCP/IP协议体系中的TCP协议上。客户机和服务器必须都支持HTTP,才能在万维网上发送和接收HTML文档并进行交互。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。前一段时间用的是HTTP/1.0,现在。而且HTTP-NG(NextGenerationofHTTP)的建议已经提出。HTTP主要特征:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器4联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。2.2TCP/IP协议简介:TransmissionControlProtocol/InternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,一层都呼叫它的下一层所提供的网络来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。3.程序设计思想:1.解析http,还原出tcp报文。2.解析tcp,还原出ip报文。3.解析ip报文。4.查找post报文,找到username和password,把其中的参数打印出5来。5.分析目的地址,源地址以及端口。6.设置循环,进行捕包。4.程序函数设计:1.http协议数据包解析函数:voidhttp_callback。2.tcp协议数据包解析函数:voidtcp_protocol_packet_callback。3.ip协议数据包解析函数:voidip_protocol_packet_callback。4.以太网数据包解析:voidethernet_protocol_packet_callback。5.webmail监控源程序#includepacket.h#includestdio.hvoidhttp_callback(u_char*arg,conststructpcap_pkthdr*pcaket_header,constu_char*packet_content,u_intlen){constu_char*p=packet_content+14+20+len;charbuf[1025];charbuf1[1025];inti=0;u_char*ps=strstr(p,POST);if(ps!=NULL){while(*ps++&&i12){if(*ps=='\n')i++;printf(%c,*ps);}}//找到username出现的位置ps=strstr(p,username=);if(ps!=NULL){//printf(%s,ps);6sscanf(ps,username=%[^&]&password=%[^&]&,buf,buf1);printf(username:%s\npassword:%s\n,buf,buf1);}printf(-----------------------------------------------------\n);}voidtcp_protocol_packet_callback(u_char*argument,conststructpcap_pkthdr*packet_header,constu_char*packet_content){structtcp_header*tcp_protocol;u_inthead_length;u_shortsource_port;u_shortdestination_port;tcp_protocol=(structtcp_header*)(packet_content+14+20);source_port=ntohs(tcp_protocol-tcp_source_port);destination_port=ntohs(tcp_protocol-tcp_destination_port);head_length=tcp_protocol-tcp_offset*4;printf(sourceport:%d\n,source_port);printf(destinationport:%d\n,destination_port);switch(destination_port){case80:http_callback(argument,packet_header,packet_content,head_length);break;default:break;}}voidip_protocol_packet_callback(u_char*argument,conststructpcap_pkthdr*packet_header,constu_char*packet_content){structip_header*ip_protocol;ip_protocol=(structip_header*)(packet_content+14);printf(sourceaddress:%s\n,inet_ntoa(ip_protocol-ip_source_address));7printf(destinationaddress:%s\n,inet_ntoa(ip_protocol-ip_destination_address));//如果是TCP协议switch(ip_protocol-ip_protocol){case6:tcp_protocol_packet_callback(argument,packet_header,packet_content);break;default:break;}}voidethernet_protocol_packet_callback(u_char*argument,conststructpcap_pkthdr*packet_header,constu_char*packet_content){u_shortethernet_type;structether_header*ethernet_protocol;ethernet_protocol=(structether_header*)packet_content;ethernet_type=ntohs(ethernet_protocol-ether_type);//如果是IP数据包,则作进一步处理switch(ethernet_type){case0x0800:printf(-----------------------------------------------------\n);ip_protocol_packet_callback(argument,packet_header,packet_content);break;default:break;}}intmain(){pcap_t*pcap_handle;charerror_content[PCAP_ERRBUF_SIZE];char*net_interface;structbpf_programbpf_filter;//设置过滤字符串charbpf_filter_string[]=tcpport80;8bpf_u_int32net_mask;bpf_u_int32net_ip;//获取可用的网络设备net_interface=pcap_lookupdev(error_content);pcap_lookupnet(net_interface,&net_ip,&net_mask,error_content);//打开设备pcap_handle=pcap_open_live(net_interface,20480,1,0,error_content);//编译过滤规