《《计算机网络安全与管理》上机实验教案.doc》由会员分享,可在线阅读,更多相关《《计算机网络安全与管理》上机实验教案.doc(99页珍藏版)》请在金锄头文库上搜索。
1、计算机网络安全与管理上机实验教案网络工程教研室著2009 年4月1实验要求:1. 实验项目名称。2. 实验目的。3. 实验内容:上机过程中的实验步骤。4. 算法:实验过程中所涉及程序的算法。5. 源程序。6. 运行结果。7. 结果的分析。8. 实验总结。目 录计算机网络安全上机实验教案1实验1 使用网络监听工具4实验2 实现加解密程序9实验3 端口扫描技术原理与实践14实验4 电子欺骗技术18实验5 防火墙原理及其基本配置33实验6 缓冲区溢出40实验7 入侵检测原理与Snort 的使用55实验8 PGP的原理与使用62实验9 实现基于挑战响应的身份认证63实验10 操作系统安全配置64附录1
2、:一个简单的sniffer程序的实现73附录2:实验7入侵检测原理78附录3:实验8 PGP 使用参考91主要参考资料99 实验1 使用网络监听工具实验目的:1. 了解Sniffer的工作原理。2. 掌握Sniffer的使用。3. 学会在Windows平台下使用Sniffer。 4. 会写一个简单的sniffer程序实验设备与实验环境:(6人/组)(2课时)1实验设备已连入局域网的计算机。2实验软件WindowsNT/2000/XP ,Sniffer软件。实验内容:1使用Sniffer抓包步骤一:进入Sniffer主界面,抓包之前设置要抓取的数据包的类型。选择主菜单“Capture”下的“De
3、fine Filter”(抓包过滤器)菜单,在出现“Define Filter”窗口中,选择“Address”选项卡。窗口中需要修改两个地方:在Address下拉列表中,选择抓包的类型是IP,在Station1下面输入本机的IP地址,在与之对应的Station2下面输入另一台主机IP地址。设置完毕后,点击该窗口的Advanced选项卡,拖动滚动条找到IP项,将IP和ICMP选中,将TCP和UDP选中,再把TCP下面的FTP和Telnet两个选项选中。步骤二:选择菜单栏Capture下Start菜单项,启动抓包以后,在主机的DOS窗口中Ping目标主机,等Ping指令执行完毕后,点击工具栏上的停
4、止并分析按钮,在出现的窗口选择Decode选项卡,可以看到数据包在两台计算机间的传递过程, Sniffer将Ping的数据包成功获取了。2分析三次握手抓包后可以看到数据包在两台计算机间的传递过程,根据此过程分析的三次握手。3. 写一个简单的sniffer程序1)把网卡置于混杂模式。2)捕捉数据包。3)分析数据包。附录:一个简单的sniffer程序的实现1. 把网卡置于混杂模式。 2. 捕获数据包。 3.分析数据包。#include headers.h#define INTERFACE eth0int Open_Raw_Socket(void);int Set_Promisc(char *int
5、erface, intsock);int main() int sock, bytes_recieved, fromlen;char buffer65535;struct sockaddr_in from;struct ip *ip;struct tcp *tcp; sock = Open_Raw_Socket();Set_Promisc(INTERFACE, sock);/捕获数据包while(1)fromlen = sizeof from;/接收数据,冰把接收到的数据放入buffer中bytes_recieved = recvfrom(sock, buffer, sizeofbuffer,
6、 0, (struct sockaddr *)&from, &fromlen);printf(nBytes received :%5dn,bytes_recieved);printf(Source address :%sn,inet_ntoa(from.sin_addr);/分析数据包并强行转化为我们定义的IP结构ip = (struct ip *)buffer;/判断在网络层中是否使用的是TCP协议if(ip-ip_protocol = 6) printf(IP header length :%dn,ip-ip_length);printf(Protocol :%dn,ip-ip_proto
7、col);/tcp信息包从整个IP/TCP包 从下面地址处开始,然后对应结构把你所需要的信息输出tcp = (struct tcp *)(buffer +(4*ip-ip_length);printf(Source port :%dn,ntohs(tcp-tcp_source_port);printf(Dest port :%dn,ntohs(tcp-tcp_dest_port);int Open_Raw_Socket() int sock; if(sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP) 0) perror(The raw socket wa
8、s not created); exit(0); ; return(sock); int Set_Promisc(char *interface, int sock ) struct ifreq ifr; /把我们网络设备的名字填充到ifr结构中 strncpy(ifr.ifr_name, interface,strnlen(interface)+1); /获取借口标志if(ioctl(sock, SIOCGIFFLAGS, &ifr) = -1) perror(Could not retrive flags for the interface); exit(0); printf(The in
9、terface is : %sn, interface); perror(Retrieved flags from interface successfully);/在我们成功的获取接口标志后把他设置成混杂模式 ifr.ifr_flags |= IFF_PROMISC; if (ioctl (sock, SIOCSIFFLAGS, &ifr) = -1 ) perror(Could not set the PROMISC flag:); exit(0); printf(Setting interface : %s : to promisc,interface); return(0); /*he
10、aders.h*/*structure of an ip header*/struct ip unsigned int ip_length:4; /*little-endian*/unsigned int ip_version:4;unsigned char ip_tos;unsigned short ip_total_length; unsigned short ip_id; unsigned short ip_flags;unsigned char ip_ttl;unsigned char ip_protocol;unsigned short ip_cksum;unsigned int i
11、p_source; unsigned int ip_dest; ;/* Structure of a TCP header */struct tcp unsigned short tcp_source_port;unsigned short tcp_dest_port;unsigned int tcp_seqno; unsigned int tcp_ackno;unsigned int tcp_res1:4, /*little-endian*/tcp_hlen:4,tcp_fin:1,tcp_syn:1,tcp_rst:1,tcp_psh:1,tcp_ack:1,tcp_urg:1,tcp_r
12、es2:2;unsigned short tcp_winsize;unsigned short tcp_cksum;unsigned short tcp_urgent;/*EOF*/#includestdio.h#includesys/socket.h#includenetinet/in.h#includearpa/inet.hstruct IP unsigned int ip_length:4; unsigned int ip_version:4; unsigned char ip_tos; unsigned shortip_total_length; unsigned short ip_i
13、d; unsigned short ip_flags; unsigned char ip_ttl; unsigned char ip_protocol; unsigned short ip_cksum;unsigned int ip_source ;unsigned int ip_source; ;struct tcpunsigned short tcp_source_port; unsigned short tcp_dest_port; unsigned short tcp_seqno;unsigned int tcp_ackno;unsigned int tcp_res1:4;tcp_hlen:4tcp_fin:1,tcp_syn:1,tcp_rst:1,tcp_psh:1,tcp_ack:1,tcp_urg: