kiss小妮妮
计算机网络安全及防范技术摘 要 主要阐述计算机信息网络攻击和入侵的特点、方法以及其安全防范手段。关键词 计算机网络安全 防范技术1 计算机网络安全的含义计算机网络安全的具体含义会随着使用者的变化而变化,使用者不同,对网络安全的认识和要求也就不同。例如从普通使用者的角度来说,可能仅仅希望个人隐私或机密信息在网络上传输时受到保护,避免被窃听、篡改和伪造;而网络提供商除了关心这些网络信息安全外,还要考虑如何应付突发的自然灾害、军事打击等对网络硬件的破坏,以及在网络出现异常时如何恢复网络通信,保持网络通信的连续性。从本质上来讲,网络安全包括组成网络系统的硬件、软件及其在网络上传输信息的安全性,使其不致因偶然的或者恶意的攻击遭到破坏,网络安全既有技术方面的问题,也有管理方面的问题,两方面相互补充,缺一不可。人为的网络入侵和攻击行为使得网络安全面临新的挑战。2 计算机网络攻击的特点计算机网络攻击具有下述特点:①损失巨大。由于攻击和入侵的对象是网络上的计算机,所以一旦他们取得成功,就会使网络中成千上万台计算机处于瘫痪状态,从而给计算机用户造成巨大的经济损失。如美国每年因计算机犯罪而造成的经济损失就达几百亿美元。平均一起计算机犯罪案件所造成的经济损失是一般案件的几十到几百倍。②威胁社会和国家安全。一些计算机网络攻击者出于各种目的经常把政府要害部门和军事部门的计算机作为攻击目标,从而对社会和国家安全造成威胁。③手段多样,手法隐蔽。计算机攻击的手段可以说五花八门。网络攻击者既可以通过监视网上数据来获取别人的保密信息;也可以通过截取别人的帐号和口令堂而皇之地进入别人的计算机系统;还可以通过一些特殊的方法绕过人们精心设计好的防火墙等等。这些过程都可以在很短的时间内通过任何一台联网的计算机完成。因而犯罪不留痕迹,隐蔽性很强。④以软件攻击为主。几乎所有的网络入侵都是通过对软件的截取和攻击从而破坏整个计算机系统的。它完全不同于人们在生活中所见到的对某些机器设备进行物理上的摧毁。因此,这一方面导致了计算机犯罪的隐蔽性,另一方面又要求人们对计算机的各种软件(包括计算机通信过程中的信息流)进行严格的保护。3 计算机网络中的安全缺陷及产生的原因网络安全缺陷产生的原因主要有:第一,TCP/IP的脆弱性。因特网的基石是TCP/IP协议。但不幸的是该协议对于网络的安全性考虑得并不多。并且,由于TCP/IP协议是公布于众的,如果人们对TCP/IP很熟悉,就可以利用它的安全缺陷来实施网络攻击。第二,网络结构的不安全性。因特网是一种网间网技术。它是由无数个局域网所连成的一个巨大网络。当人们用一台主机和另一局域网的主机进行通信时,通常情况下它们之间互相传送的数据流要经过很多机器重重转发,如果攻击者利用一台处于用户的数据流传输路径上的主机,他就可以劫持用户的数据包。第三,易被窃听。由于因特网上大多数数据流都没有加密,因此人们利用网上免费提供的工具就很容易对网上的电子邮件、口令和传输的文件进行窃听。第四,缺乏安全意识。虽然网络中设置了许多安全保护屏障,但人们普遍缺乏安全意识,从而使这些保护措施形同虚设。如人们为了避开防火墙代理服务器的额外认证,进行直接的PPP连接从而避开了防火墙的保护。4 网络攻击和入侵的主要途径网络入侵是指网络攻击者通过非法的手段(如破译口令、电子欺等)获得非法的权限,并通过使用这些非法的权限使网络攻击者能对被攻击的主机进行非授权的操作。网络入侵的主要途径有:破译口令、IP欺和DNS欺。口令是计算机系统抵御入侵者的一种重要手段,所谓口令入侵是指使用某些合法用户的帐号和口令登录到目的主机,然后再实施攻击活动。这种方法的前提是必须先得到该主机上的某个合法用户的帐号,然后再进行合法用户口令的破译。获得普通用户帐号的方法很多,如: 利用目标主机的Finger功能:当用Finger命令查询时,主机系统会将保存的用户资料(如用户名、登录时间等)显示在终端或计算机上;利用目标主机的服务:有些主机没有关闭的目录查询服务,也给攻击者提供了获得信息的一条简易途径;从电子邮件地址中收集:有些用户电子邮件地址常会透露其在目标主机上的帐号;查看主机是否有习惯性的帐号:有经验的用户都知道,很多系统会使用一些习惯性的帐号,造成帐号的泄露。IP欺是指攻击者伪造别人的IP地址,让一台计算机假冒另一台计算机以达到蒙混过关的目的。它只能对某些特定的运行TCP/IP的计算机进行入侵。IP欺利用了TCP/IP网络协议的脆弱性。在TCP的三次握手过程中,入侵者假冒被入侵主机的信任主机与被入侵主机进行连接,并对被入侵主机所信任的主机发起淹没攻击,使被信任的主机处于瘫痪状态。当主机正在进行远程服务时,网络入侵者最容易获得目标网络的信任关系,从而进行IP欺。IP欺是建立在对目标网络的信任关系基础之上的。同一网络的计算机彼此都知道对方的地址,它们之间互相信任。由于这种信任关系,这些计算机彼此可以不进行地址的认证而执行远程操作。域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换信息。通常,网络用户通过UDP协议和DNS服务器进行通信,而服务器在特定的53端口监听,并返回用户所需的相关信息。DNS协议不对转换或信息性的更新进行身份认证,这使得该协议被人以一些不同的方式加以利用。当攻击者危害DNS服务器并明确地更改主机名—IP地址映射表时,DNS欺就会发生。这些改变被写入DNS服务器上的转换表。因而,当一个客户机请求查询时,用户只能得到这个伪造的地址,该地址是一个完全处于攻击者控制下的机器的IP地址。因为网络上的主机都信任DNS服务器,所以一个被破坏的DNS服务器可以将客户引导到非法的服务器,也可以欺服务器相信一个IP地址确实属于一个被信任客户。5 常见的网络攻击及其防范对策 特洛伊木马特洛伊木马程序技术是黑客常用的攻击手段。它通过在你的电脑系统隐藏一个会在Windows启动时运行的程序,采用服务器/客户机的运行方式,从而达到在上网时控制你电脑的目的。特洛伊木马是夹带在执行正常功能的程序中的一段额外操作代码。因为在特洛伊木马中存在这些用户不知道的额外操作代码,因此含有特洛伊木马的程序在执行时,表面上是执行正常的程序,而实际上是在执行用户不希望的程序。特洛伊木马程序包括两个部分,即实现攻击者目的的指令和在网络中传播的指令。特洛伊木马具有很强的生命力,在网络中当人们执行一个含有特洛伊木马的程序时,它能把自己插入一些未被感染的程序中,从而使它们受到感染。此类攻击对计算机的危害极大,通过特洛伊木马,网络攻击者可以读写未经授权的文件,甚至可以获得对被攻击的计算机的控制权。防止在正常程序中隐藏特洛伊木马的主要方法是人们在生成文件时,对每一个文件进行数字签名,而在运行文件时通过对数字签名的检查来判断文件是否被修改,从而确定文件中是否含有特洛伊木马。避免下载可疑程序并拒绝执行,运用网络扫描软件定期监视内部主机上的监听TCP服务。 邮件炸弹电子邮件炸弹是最古老的匿名攻击之一,通过设置一台机器不断的大量的向同一地址发送电子邮件,攻击者能够耗尽接受者网络的带宽,占据邮箱的空间,使用户的存储空间消耗殆尽,从而阻止用户对正常邮件的接收,防碍计算机的正常工作。此种攻击经常出现在网络黑客通过计算机网络对某一目标的报复活动中。防止邮件炸弹的方法主要有通过配置路由器,有选择地接收电子邮件,对邮件地址进行配置,自动删除来自同一主机的过量或重复的消息,也可使自己的SMTP连接只能达成指定的服务器,从而免受外界邮件的侵袭。 过载攻击过载攻击是攻击者通过服务器长时间发出大量无用的请求,使被攻击的服务器一直处于繁忙的状态,从而无法满足其他用户的请求。过载攻击中被攻击者用得最多的一种方法是进程攻击,它是通过大量地进行人为地增大CPU的工作量,耗费CPU的工作时间,使其它的用户一直处于等待状态。防止过载攻击的方法有:限制单个用户所拥有的最大进程数;杀死一些耗时的进程。然而,不幸的是这两种方法都存在一定的负面效应。通过对单个用户所拥有的最大进程数的限制和耗时进程的删除,会使用户某些正常的请求得不到系统的响应,从而出现类似拒绝服务的现象。通常,管理员可以使用网络监视工具来发现这种攻击,通过主机列表和网络地址列表来分析问题的所在,也可以登录防火墙或路由器来发现攻击究竟是来自于网络外部还是网络内部。另外,还可以让系统自动检查是否过载或者重新启动系统。 淹没攻击正常情况下,TCP连接建立要经历3次握手的过程,即客户机向主机发送SYN请求信号;目标主机收到请求信号后向客户机发送SYN/ACK消息;客户机收到SYN/ACK消息后再向主机发送RST信号并断开连接。TCP的这三次握手过程为人们提供了攻击网络的机会。攻击者可以使用一个不存在或当时没有被使用的主机的IP地址,向被攻击主机发出SYN请求信号,当被攻击主机收到SYN请求信号后,它向这台不存在IP地址的伪装主机发出SYN/消息。由于此时主机的IP不存在或当时没有被使用所以无法向主机发送RST,因此,造成被攻击的主机一直处于等待状态,直至超时。如果攻击者不断地向被攻击的主机发送SYN请求,被攻击主机就会一直处于等待状态,从而无法响应其他用户的请求。对付淹没攻击的最好方法是实时监控系统处于SYN-RECEIVED状态的连接数,当连接数超过某一给定的数值时,实时关闭这些连接。参考文献1 胡道元.计算机局域网〔M〕.北京:清华大学出版社,20012 朱理森,张守连.计算机网络应用技术〔M〕.北京:专利文献出版社,20013 刘占全.网络管理与防火墙〔M〕.北京:人民邮电出版社,1999
臭臭花1
用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。1、/* * 程序名称:贪食蛇 * 原作者:BigF * 修改者:algo * 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者, * 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之 * 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式, * 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。 * 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。 */package mvcTest;/** * @author WangYu * @version * Description: * * Create on :Date :2005-6-13 Time:15:57:16 * LastModified: * History: */public class GreedSnake { public static void main(String[] args) { SnakeModel model = new SnakeModel(20,30); SnakeControl control = new SnakeControl(model); SnakeView view = new SnakeView(model,control); //添加一个观察者,让view成为model的观察者 (view); (new Thread(model)).start(); }} -------------------------------------------------------------2、package mvcTest;// ;import ;/** * MVC中的Controler,负责接收用户的操作,并把用户操作通知Model */public class SnakeControl implements KeyListener{ SnakeModel model; public SnakeControl(SnakeModel model){ = model; } public void keyPressed(KeyEvent e) { int keyCode = (); if (){ // 运行状态下,处理的按键 switch (keyCode) { case : (); break; case : (); break; case : (); break; case : (); break; case : case : (); break; case : case : (); break; case : case : (); break; default: } } // 任何情况下处理的按键,按键导致重新启动游戏 if (keyCode == || keyCode == || keyCode == ) { (); } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { }}-------------------------------------------------------------3、/* * */package mvcTest;/** * 游戏的Model类,负责所有游戏相关数据及运行 * @author WangYu * @version * Description: * * Create on :Date :2005-6-13 Time:15:58:33 * LastModified: * History: */// .*;import ;import ;import ;import ;/** * 游戏的Model类,负责所有游戏相关数据及运行 */class SnakeModel extends Observable implements Runnable { boolean[][] matrix; // 指示位置上有没蛇体或食物 LinkedList nodeArray = new LinkedList(); // 蛇体 Node food; int maxX; int maxY; int direction = 2; // 蛇运行的方向 boolean running = false; // 运行状态 int timeInterval = 200; // 时间间隔,毫秒 double speedChangeRate = ; // 每次得速度变化率 boolean paused = false; // 暂停标志 int score = 0; // 得分 int countMove = 0; // 吃到食物前移动的次数 // UP and DOWN should be even // RIGHT and LEFT should be odd public static final int UP = 2; public static final int DOWN = 4; public static final int LEFT = 1; public static final int RIGHT = 3; public SnakeModel( int maxX, int maxY) { = maxX; = maxY; reset(); } public void reset(){ direction = ; // 蛇运行的方向 timeInterval = 200; // 时间间隔,毫秒 paused = false; // 暂停标志 score = 0; // 得分 countMove = 0; // 吃到食物前移动的次数 // initial matirx, 全部清0 matrix = new boolean[maxX][]; for (int i = 0; i < maxX; ++i) { matrix[i] = new boolean[maxY]; (matrix[i], false); } // initial the snake // 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半 int initArrayLength = maxX > 20 ? 10 : maxX / 2; (); for (int i = 0; i < initArrayLength; ++i) { int x = maxX / 2 + i;//maxX被初始化为20 int y = maxY / 2; //maxY被初始化为30 //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15] //默认的运行方向向上,所以游戏一开始nodeArray就变为: // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15] (new Node(x, y)); matrix[x][y] = true; } // 创建食物 food = createFood(); matrix[][] = true; } public void changeDirection(int newDirection) { // 改变的方向不能与原来方向同向或反向 if (direction % 2 != newDirection % 2) { direction = newDirection; } } /** * 运行一次 * @return */ public boolean moveOn() { Node n = (Node) (); int x = ; int y = ; // 根据方向增减坐标值 switch (direction) { case UP: y--; break; case DOWN: y++; break; case LEFT: x--; break; case RIGHT: x++; break; } // 如果新坐标落在有效范围内,则进行处理 if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) { if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物) if (x == && y == ) { // 吃到食物,成功 (food); // 从蛇头赠长 // 分数规则,与移动改变方向的次数和速度两个元素有关 int scoreGet = (10000 - 200 * countMove) / timeInterval; score += scoreGet > 0 ? scoreGet : 10; countMove = 0; food = createFood(); // 创建新的食物 matrix[][] = true; // 设置食物所在位置 return true; } else // 吃到蛇体自身,失败 return false; } else { // 如果新坐标的点上没有东西(蛇体),移动蛇体 (new Node(x, y)); matrix[x][y] = true; n = (Node) (); matrix[][] = false; countMove++; return true; } } return false; // 触到边线,失败 } public void run() { running = true; while (running) { try { (timeInterval); } catch (Exception e) { break; } if (!paused) { if (moveOn()) { setChanged(); // Model通知View数据已经更新 notifyObservers(); } else { (null, "you failed", "Game Over", ); break; } } } running = false; } private Node createFood() { int x = 0; int y = 0; // 随机获取一个有效区域内的与蛇体和食物不重叠的位置 do { Random r = new Random(); x = (maxX); y = (maxY); } while (matrix[x][y]); return new Node(x, y); } public void speedUp() { timeInterval *= speedChangeRate; } public void speedDown() { timeInterval /= speedChangeRate; } public void changePauseState() { paused = !paused; } public String toString() { String result = ""; for (int i = 0; i < (); ++i) { Node n = (Node) (i); result += "[" + + "," + + "]"; } return result; }}class Node { int x; int y; Node(int x, int y) { = x; = y; }} ------------------------------------------------------------4、package mvcTest;// .*;import .*;import ;import ;import ;import ;/** * MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑 */public class SnakeView implements Observer { SnakeControl control = null; SnakeModel model = null; JFrame mainFrame; Canvas paintCanvas; JLabel labelScore; public static final int canvasWidth = 200; public static final int canvasHeight = 300; public static final int nodeWidth = 10; public static final int nodeHeight = 10; public SnakeView(SnakeModel model, SnakeControl control) { = model; = control; mainFrame = new JFrame("GreedSnake"); Container cp = (); // 创建顶部的分数显示 labelScore = new JLabel("Score:"); (labelScore, ); // 创建中间的游戏显示区域 paintCanvas = new Canvas(); (canvasWidth + 1, canvasHeight + 1); (control); (paintCanvas, ); // 创建底下的帮助栏 JPanel panelButtom = new JPanel(); (new BorderLayout()); JLabel labelHelp; labelHelp = new JLabel("PageUp, PageDown for speed;", ); (labelHelp, ); labelHelp = new JLabel("ENTER or R or S for start;", ); (labelHelp, ); labelHelp = new JLabel("SPACE or P for pause", ); (labelHelp, ); (panelButtom, ); (control); (); (false); (); (true); } void repaint() { Graphics g = (); //draw background (); (0, 0, canvasWidth, canvasHeight); // draw the snake (); LinkedList na = ; Iterator it = (); while (()) { Node n = (Node) (); drawNode(g, n); } // draw the food (); Node n = ; drawNode(g, n); updateScore(); } private void drawNode(Graphics g, Node n) { ( * nodeWidth, * nodeHeight, nodeWidth - 1, nodeHeight - 1); } public void updateScore() { String s = "Score: " + ; (s); } public void update(Observable o, Object arg) { repaint(); }}-------------------------------------------------------------
哈哈,这个太多了说实话,javaweb的毕业设计说来说去就那么些,比如那框架做一个管理系统,不要看这么多年都是这么些题目,但是对于大部分同学来说重新完整实现还是
硕士论文的要求比本科论文更严格,每篇硕士论文都要通过论文查重来检测。查重后,降重需要方法和技巧。上学前要先查初稿。那么硕士论文如何通过查重降重呢?paperfr
程序有了那就该按你的程序写报告啊 就这么给个要求 谁知道怎么写啊
写单片机贪吃蛇游戏毕业设计开题报告文献综述方法如下。1、文献综述,研究思路研究方法及手段。2、参考文献进度安排。3、文献综述是开题报告中的最重要部分。
这样的活动能够让孩子锻炼身体,而且也能够加强孩子的团结意识,带来更多的乐趣,在活动当中真的会让孩子们变得更加优秀。