当前位置:文档之家› 信息安全课设--哈工大

信息安全课设--哈工大

H a r b i n I n s t i t u t e o f T e c h n o l o g y a t W e i h a iWebMail 解析作者:院系:计算机科学与技术班级:学号:指导老师:需要源程序的留下联系方式哈尔滨工业大学(威海)二零一二年六月目录1.前言 (3)2.涉及的协议简介: (3)2.1HTTP协议简介: (3)2.2 TCP/IP协议简介: (4)3.程序设计思想: (4)4.程序函数设计: (5)5. webmail监控源程序 (5)6. 相应截图及说明 (9)21.前言随着网络的发展和普及,浏览网页、QQ聊天、电子留言、电子邮件己经深入人们的生活。

在众多的现代通信方式中,电子邮件(E- mail)己经成为了其中的重要组成部分。

当电子邮件给人们带来极大便利的同时,也带来了一系列的不安全因素:有害信息的广泛传播、国家和企业机密的泄露等。

为了控制和减少这些不安全因素的发生,需要建立一系列的安全机制。

对传输内容的监控是较为重要的一种,在监控的过程中,对传输内容的还原又是最重要的一步。

此次实验目的是捕获webmail的登录账号与密码等信息。

2.涉及的协议简介:2.1HTTP协议简介:超文本传送协议 (HTTP) 是一种通信协议,它允许将超文本标记语言(HTML) 文档从 Web 服务器传送到 Web 浏览器。

HTML 是一种用于创建文档的标记语言,这些文档包含到相关信息的链接。

您可以单击一个链接来访问其它文档、图像或多媒体对象,并获得关于链接项的附加信息。

HTTP工作在TCP/IP协议体系中的TCP协议上。

客户机和服务器必须都支持 HTTP,才能在万维网上发送和接收HTML 文档并进行交互。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。

前一段时间用的是 HTTP/1.0,现在WWW中使用的是HTTP/1.1。

而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

HTTP主要特征:1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。

请求方法常用的有GET、HEAD、POST。

每种方法规定了客户与服务器3联系的类型不同。

由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象。

正在传输的类型由Content-Type加以标记。

4.无连接:无连接的含义是限制每次连接只处理一个请求。

服务器处理完客户的请求,并收到客户的应答后,即断开连接。

采用这种方式可以节省传输时间。

5.无状态:HTTP协议是无状态协议。

无状态是指协议对于事务处理没有记忆能力。

缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

另一方面,在服务器不需要先前信息时它的应答就较快。

2.2 TCP/IP协议简介:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,Internet 最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。

TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

协议采用了4层的层级结构,一层都呼叫它的下一层所提供的网络来完成自己的需求。

通俗而言:TCP 负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。

而IP是给因特网的每一台电脑规定一个地址。

3.程序设计思想:1.解析http,还原出tcp报文。

2.解析tcp,还原出ip报文。

3.解析ip报文。

4.查找post报文,找到username和password,把其中的参数打印出4来。

5.分析目的地址,源地址以及端口。

6.设置循环,进行捕包。

4.程序函数设计:1.http协议数据包解析函数:void http_callback。

2.tcp协议数据包解析函数:void tcp_protocol_packet_callback。

3.ip协议数据包解析函数:void ip_protocol_packet_callback。

4.以太网数据包解析:void ethernet_protocol_packet_callback。

5. webmail监控源程序#include "packet.h"#include <stdio.h>void http_callback(u_char *arg,const struct pcap_pkthdr* pcaket_header,const u_char* packet_content,u_int len){const u_char* p = packet_content + 14 + 20 + len ;char buf[1025];char buf1[1025];int i = 0;u_char* ps = strstr(p,"POST");if(ps != NULL ){while(*ps++ && i < 12){if(*ps == '\n')i++;printf("%c",*ps);}}//找到username出现的位置ps = strstr(p,"username=");if(ps != NULL){//printf("%s",ps);5sscanf(ps,"username=%[^&]&password=%[^&]&",buf,buf1);printf("username:%s\npassword:%s\n",buf,buf1);}printf("-----------------------------------------------------\n");}void tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr* packet_header,const u_char* packet_content){struct tcp_header *tcp_protocol;u_int head_length;u_short source_port;u_short destination_port;tcp_protocol = (struct tcp_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("source port:%d\n",source_port);printf("destination port:%d\n",destination_port);switch(destination_port){case 80:http_callback(argument,packet_header,packet_content,head_length);break;default:break;}}void ip_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){struct ip_header * ip_protocol;ip_protocol = (struct ip_header*)(packet_content+14);printf("source address :%s\n",inet_ntoa(ip_protocol->ip_source_address));6printf("destination address :%s\n",inet_ntoa(ip_protocol->ip_destination_address));//如果是TCP协议switch(ip_protocol->ip_protocol){case 6:tcp_protocol_packet_callback(argument,packet_header,packet_content);break;default:break;}}void ethernet_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){u_short ethernet_type;struct ether_header *ethernet_protocol;ethernet_protocol = (struct ether_header *)packet_content;ethernet_type = ntohs(ethernet_protocol->ether_type);//如果是IP数据包,则作进一步处理switch(ethernet_type){case 0x0800:printf("-----------------------------------------------------\n");ip_protocol_packet_callback(argument,packet_header,packet_content);break;default:break;}}int main(){pcap_t *pcap_handle;char error_content[PCAP_ERRBUF_SIZE];char *net_interface;struct bpf_program bpf_filter;// 设置过滤字符串char bpf_filter_string[] = "tcp port 80";7bpf_u_int32 net_mask;bpf_u_int32 net_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);//编译过滤规则pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,0,net_ip);pcap_setfilter(pcap_handle,&bpf_filter);//是否为以太网if(pcap_datalink(pcap_handle) != DLT_EN10MB)return;//循环捕包pcap_loop(pcap_handle,-1,ethernet_protocol_packet_callback,NULL);pcap_close(pcap_handle);}896. 相应截图及说明1. 编译产生可执行文件watchwebmail 。

相关主题