网络安全系统实验报告材料.docx
《网络安全系统实验报告材料.docx》由会员分享,可在线阅读,更多相关《网络安全系统实验报告材料.docx(39页珍藏版)》请在冰豆网上搜索。
网络安全系统实验报告材料
网络安全实验报告
姓名:
杨瑞春
班级:
自动化86
学号:
08045009
实验一:
网络命令操作与网络协议分析
一.实验目的:
1.熟悉网络基本命令的操作与功能。
2.熟练使用网络协议分析软件ethereal分析应用协议。
二.实验步骤:
1.网络命令:
ping
tracert
netstat
ipconfig
telnet
netcat
Arp
route
nslookup
Ssh
2.协议分析软件:
ethereal的主要功能:
设置流量过滤条件,分析网络数据包,流重组功能,协议分析。
三.实验任务:
1.跟踪某一网站如google的路由路径
2.查看本机的MAC地址,ip地址
输入ipconfig/all
找见本地连接.
Description.....:
SiS900-BasedPCIFastEthernetAdapte
PhysicalAddress...:
00-13-8F-07-3A-57
DHCPEnabled.....:
No
IPAddress......:
192.168.1.5
SubnetMask.....:
255.255.255.0
DefaultGateway...:
192.168.1.1
DNSServers.....:
61.128.128.67
192.168.1.1
DefaultGateway...:
192.168.1.1
这项是网关.也就是路由器IP
PhysicalAddress...:
00-13-8F-07-3A-57
这项就是MAC地址了.
3.telnet到linux服务器,执行指定的命令
4.ssh连接到linux服务器,执行指定的命令
5.nc应用:
telnet,绑定程序(cmd,shell等),扫描,连接等。
6.选择任意一种应用层协议如www,ftp,qq等,利用ethereal对该协议进行分析。
实验报告要求有ethereal捕获的网络流量和数据包协议解析的屏幕截图。
7分析honeynetchallengedataset的真实攻击网络流量
利用ethereal捕获的网络流量如下图所示:
分析:
从捕获的网络流量可以发现,有许多的SYN信号,但是TCK信号很少,因此可以认为三次握手没有建立,连接失败。
实验二:
黑客攻击技术实验
一.实验要求:
1.掌握典型攻击技术原理
2.熟悉典型攻击软件的功能及操作
3.分析黑客攻击软件执行输出结果
二.实验内容:
1.namp
2.nessus
3.craftnetworkpacket:
hping
4.crackpassword:
johntheripper
5.webattack:
nikto
6.googlehackingtools
三.实验任务
1利用winnmap扫描功能,给出扫描报告及分析
2nessus应用,给出漏洞扫描报告
设置扫描策略
添加新扫描
扫描结果
扫描报告:
3.执行nikto对web服务器进行漏洞扫描。
4.john应用及配置
在run目录下运行john-386--wordlist=password.lstnewxjtu.txt,对newxjtu.txt中内容解密,会生成一个.pot的文件,对同一密文只能解密一次,若删除.pot文件,可以再次解密。
破解后生成的明文为$LM$9eceeb689e046fcd:
NEWXJTU
$LM$aad3b435b51404ee:
5.googlehackingtools应用
打开GoogleHacking,在网站输入框中输入,点击查询网站详情,可以在随后弹出的网页上查看交大网站的详细信息,包括站点创建时间,IP地址,IP所在地,WEB服务器等信息。
实验三:
网络安全技术实验
一.实验要求:
1.掌握防火墙,VPN,入侵检测系统等安全技术的基本原理和实现过程
2.熟悉IPSec、SSL、Kerberos、PGP中的安全认证协议关键技术
3.熟练使用IPSec、SSL、Kerberos、PGP等安全工具
二.实验内容:
1.防火墙
2.VPN
3.IPSec
4.SSL
5.Kerberos
6.PGP
7.Snort
三.实验任务:
1.防火墙:
利用个人防火墙软件,定义防火墙规则,允许或是禁止某类网络流量的访问。
2.IPSec:
windows自带的IPSec服务配置及使用。
搭建一个VPN,实现隧道模式,传输模式等功能。
(1)、启用xp的远程访问组件,该组件默认不启用。
打开服务services.msc,找到RoutingandRemoteAccess服务,设置启动类型为自动,并启动服务。
(2)、双击打开属性,勾选“虚拟专用网”下的复选框。
打开“用户页”,选择允许远程拨入的用户,或者新建用户。
打开网络页,确保计算机上已经安装了IPX/SPX协议。
服务器上设置完成。
(3)、打开客户机,打开网上邻居,单击创建一个新的连接。
点击“下一步”
单击“连接到我的工作场所的网络”
单击“虚拟专用网络连接”
输入公司名,单击下一步
输入VPN服务器的IP地址,
单击完成客户机创建连接完毕。
(5)、打开刚刚创建好的连接,输入允许介入的用户名和密码,单击“连接”
网络连接后,客户机成功接入XPVPN服务器
3.SSL:
openSSL配置及使用
4.Kerberos:
windows实现的kerberos认证服务器配置及使用
5.PGP:
GNUpgp
6.Snort:
定义变量,配置规则,定义新的规则,学习攻击检测规则及报警分析
在使用snort之前请先安装wireshark,因为会用到其中的winpcap:
1.将snort安装在C盘根目录下。
2.安装完成后先把rules.rar解压,将里面的文件全部直接放在snort\rules\下
3.将snort.conf拷贝到bin目录下
4.在cmd中执行snort的命令
Snort扫描到的端口
查看snort.conf
实验四:
网络安全软件开发:
网络扫描器
一.实验目的:
1.熟悉网络扫描器实现的关键技术
2.熟练运用C#,java开发网络应用程序
3.熟悉网络协议字段含义及结构
二.实验内容:
1.网络扫描器实现基本的地址扫描,端口扫描,TCP/UDP扫描,实现多线程扫描。
2.图形化界面的网络扫描器软件
3.提交源代码、可执行程序及代码注释文件及执行结果截图。
三.实验分析:
多线程:
电脑上有
个端口。
如果只启动一个线程的话
个端口需要的时间可以用小时计算。
解决这个问题需要用到多线程原理。
多线程实现可通过继承Thread类或者实现Runnable接口来达到。
主机端口扫描:
与目标主机创建TCP连接,如果成功则说明端口监听中,同事对正在监听的端口做识别操作!
默认按照常用端口服务给出提示!
例如21,则提示ftp服务。
UDP扫描是向目标主机端口发送固定字符,读取目标主机回复内容!
TCP扫描原理:
利用.Socket类建立socket连接,如果无法与指定的IP和端口建立连接,将会抛出IOException。
我们用try-catch对这个IOException异常进行捕获,以判断是否成功与指定的IP端口建立连接。
如果成功建立了连接,说明指定IP的指定端口已经开放;如果程序抛出了一个IOException异常被我们捕获,则说明指定的IP没有开放指定的端口。
扫描指定端口段则是利用循环不断与服务器的指定端口进行连接,供我们判断是否开放。
UDP扫描原理:
这种方法使用的是UDP协议。
由于这个协议很简单,所以扫描变得相对比较困难。
这是由于打开的端口对扫描探测并不发送一个确认,关闭的端口也并不需要发送一个错误数据包。
幸运的是,许多主机在你向一个未打开的UDP端口发送一个数据包时,会返回一个ICMP_PORT_UNREACH错误。
这样你就能发现哪个端口是关闭的。
UDP和ICMP错误都不保证能到达,因此这种扫描器必须还实现在一个包看上去是丢失的时候能重新传输。
这种扫描方法是很慢的,因为RFC对ICMP错误消息的产生速率做了规定。
同样,这种扫描方法需要具有root权限。
利用.DatagramSocket类给指导IP发送DatagramPacket数据包,如果捕获到.PortUnreachableException异常,说明对方主机返回了ICMP_PORT_UNREACH的错误,说明端口关闭,否则如果在指定等待时间内没有得到回复,则捕获到.SocketTimeoutException连接超时异常,说明端口是开放的。
判断IP地址和端口合法性:
在得到端口和建立socket之前一定要判断IP地址和端口的合法性,因为端口的范围是在1~65535,如果我们去建立范围外端口的连接就是没必要的,而且是不可行的。
IP地址表示成XX.XX.XX.XX格式,XX范围在0~255之间,在这之外是不合法的。
图形化界面(GUI)设计:
主要用到了java.awt提供的和图形界面相关的类。
为了使界面更美观使用了swing组件。
socket中的close方法:
不需要一个socket的时候应关闭它,因为socket是一种有限的系统资源。
关闭socket将释放有关的资源,并允许绑定在此socket上的端口被重新使用。
Socket被关闭之后就不能再向它收发数据
UDP缺陷说明:
开放的UDP端口并不需要送回ACK包,而关闭的端口也不要求送回错误包(而本实验基于的原理就是那些主机在关闭的UDP端口会回送ICMPPortUnreachable错误,因此有很大的几率误判,由于时间原因和自身知识的局限不能想到更好的方法),所以利用UDP包进行扫描非常困难。
UDP包和ICMP包都是不可靠的,速度慢(差错报文产生的速度有限制),并且需要root权限才能读取ICMP消息,因此使用的局限性好大。
四.实验结果:
1.初始界面:
2.对站点127.0.0.1进行TCP扫描:
3.对站点127.0.0.1进行UDP扫描:
实验源代码:
/*基于多线程端口扫描程序源代码*/
importjava.awt.Color;//类的调用
importjava.awt.Container;
importjava.awt.Label;
importjava.awt.TextArea;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;
importjava.io.IOException;
import.InetAddress;
import.InetSocketAddress;
import.Socket;
import.SocketAddress;
import.DatagramPacket;
import.DatagramSocket;
import.UnknownHostException;
importjavax.swing.JButton;
importjavax.swing.JDialog;
importjavax.swing.JFrame;
importjavax.swing.JTextField;
publicclassScannerimplementsActionListener{
//创建主窗口
publicstaticJFramemainFrame=newJFrame();
publicstaticLabellabelIP=newLabel("主机IP");
publicstaticLabellabelPortStart=newLabel("起始端口:
");
publicstaticLabellabelPortEnd=newLabel("结束端口:
");
publicstaticLabellabelThread=newLabel("线程数:
");
publicstaticLabellabelResult=newLabel("扫描结果:
");
publicstaticLabelState=newLabel("扫描状态:
");
publicstaticLabelScanning=newLabel("未开始扫描");
publicstaticJTextFieldhostName=newJTextField("172.22.65.10");
publicstaticJTextFieldPortStart=newJTextField("0");
publicstaticJTextFieldPortEnd=newJTextField("100");
publicstaticJTextFieldThreadNum=newJTextField("10");
//文本区域,显示扫描结果
publicstaticTextAreaResult=newTextArea();
publicstaticLabelDLGINFO=newLabel("");
publicstaticJButtonStart=newJButton("TCP扫描");
publicstaticJButtonStart2=newJButton("UDP扫描");
publicstaticJButtonExit=newJButton("退出");
//错误提示对话框
publicstaticJDialogDLGError=newJDialog(mainFrame,"错误");
publicstaticJButtonOK=newJButton("确定");
publicScanner(){//GUI界面
//设置主窗体名称
mainFrame.setTitle("多线程端口扫描器");
//设置主窗体位置和大小
mainFrame.setBounds(180,200,550,300);
mainFrame.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
//设置错误提示框
ContainerdPanel=DLGError.getContentPane();
dPanel.setLayout(null);
dPanel.add(DLGINFO);
dPanel.add(OK);
dPanel.setBackground(newColor(153,255,204));
OK.setActionCommand("ok");
OK.addActionListener(this);
//在主窗体中添加其他组件
mainFrame.setLayout(null);
mainFrame.setResizable(false);
mainFrame.add(Start);
mainFrame.add(Start2);
mainFrame.add(Exit);
mainFrame.add(labelIP);
mainFrame.add(hostName);
mainFrame.add(labelPortStart);
mainFrame.add(labelPortEnd);
mainFrame.add(PortStart);
mainFrame.add(PortEnd);
mainFrame.add(labelThread);
mainFrame.add(ThreadNum);
mainFrame.add(labelResult);
mainFrame.add(Result);
mainFrame.add(State);
mainFrame.add(Scanning);
//设置扫描按钮和退出按钮
Start.setBounds(350,232,100,30);
Start.setActionCommand("Start");
Start.addActionListener(this);
Start.setBackground(newColor(153,255,204));
Start2.setBackground(newColor(153,255,204));
Start2.setBounds(250,232,100,30);
Start2.setActionCommand("Start2");
Start2.addActionListener(this);
Exit.setBounds(475,232,60,30);
Exit.setActionCommand("Exit");
Exit.addActionListener(this);
Exit.setBackground(newColor(153,255,204));
labelIP.setBounds(17,13,50,20);
hostName.setBounds(67,10,92,25);
hostName.setHorizontalAlignment(JTextField.CENTER);
labelPortStart.setBounds(162,13,60,20);
PortStart.setBounds(227,10,45,25);
PortStart.setHorizontalAlignment(JTextField.CENTER);
labelPortEnd.setBounds(292,13,60,20);
PortEnd.setBounds(357,10,45,25);
PortEnd.setHorizontalAlignment(JTextField.CENTER);
labelThread.setBounds(422,13,50,20);
ThreadNum.setBounds(477,10,45,25);
ThreadNum.setHorizontalAlignment(JTextField.CENTER);
labelResult.setBounds(1,45,55,20);
Result.setBounds(1,65,542,160);
Result.setEditable(false);
Result.setBackground(newColor(204,255,51));//设置显示结果窗口颜色RGB
State.setBounds(17,232,60,30);
Scanning.setBounds(80,232,120,30);
mainFrame.setVisible(true);
}
publicvoidactionPerformed(ActionEvente){
Stringcmd=e.getActionCommand();//得到明明处理事件
if(cmd.equals("Start")||cmd.equals("Start2")){
//启动扫描线程
try{
Scan.hostAddress=InetAddress.getByName(Scanner.hostName.getText());
Scan2.hostAddress=InetAddress.getByName(Scanner.hostName.getText());
}catch(UnknownHostExceptione1){
DLGError.setBounds(300,280,160,110);
DLGINFO.setText("错误的IP地址/域名");
DLGINFO.setBounds(25,15,100,20);
OK.setBounds(45,40,60,30);
DLGError.setVisible(true);
return;
}
intminPort;
intmaxPort;
intthreadNum;
//获取输入数据
try{
minPort=Integer.parseInt(PortStart.getText());
maxPort=Integer.parseInt(PortEnd.getText());
threadNum=Integer.parseInt(ThreadNum.getText());
}catch(NumberFormatExceptione1){
DLGError.setBounds(300,280,299,120);
DLGINFO.setText("错误的端口号或线程数!
端口号和线程数必须为整数!
");
DLGINFO.setBounds(10,20,280,20);
OK.setBounds(110,50,60,30);
DLGError.setVisible(true);
return;
}
//输入信息错误处理
if((minPort<0)||(maxPort>65535)||(minPort>maxPort)){
DLGError.setBounds(300,280,295,120);
DLGINFO.setText("最小端口必须是0-65535并且小于最大端口的整数");
DLGI