网络课程设计_第1页
网络课程设计_第2页
网络课程设计_第3页
网络课程设计_第4页
网络课程设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、网络编程技术报告端口扫描器报告人:04级软件工程6班 李阳合作人:04级软件工程6班 卓多伟一、端口扫描器产生的背景2二、端口扫描器在扫描过程中主要具有以下三个方面的能力:2三、扫描器的原理3四、端口扫描器的设计分析过程3(1)设计过程中所用到的技术3(2)程序设计分析(即程序设计流程)51、新建一个Windows应用程序项目,设计界面如:52、使用的名称空间:(useing)53、添加成员64、对ICMP报文的操作控制65、添加按钮Ping的Click 事件代码:86、添加扫描端口的Click事件117、运行结果:12五、课程设计心得体会121、对Microsoft.NET平台的体系结构的了

2、解122、对类库的熟悉133、对端口扫描器的了解:134、增强了合作的能力13一、端口扫描器产生的背景(了解到远程计算机所存在的安全问题)端口扫描器是一种自动检测远程或本地计算机安全性弱点的程序,通过使用扫描器可不留痕迹的发现远程服务器的各种TCP协议端口的分配及提供的服务,还可以得知它们所使用的软件版本!这就能间接的了解到远程计算机所存在的安全问题。 端口扫描"通常指用同一信息对目标计算机的所有所需扫描的端口进行发送,然后根据返回端口状态来分析目标计算机的端口是否打开、是否可用。"端口扫描"行为的一个重要特征是:在短时期内有很多来自相同的信源地址传向不同的目的地

3、端口的包。 对于用端口扫描进行攻击的人来说,攻击者总是可以做到在获得扫描结果的同时,使自己很难被发现或者说很难被逆向跟踪。为了隐藏攻击,攻击者可以慢慢地进行扫描。除非目标系统通常闲着(这样对一个没有listen端口的数据包都会引起管理员的注意),有很大时间间隔的端口扫描是很难被识别的。隐藏源地址的方法是发送大量的欺骗性的端口扫描包(1000个),其中只有一个是从真正的源地址来的。这样,即使全部包(1000)都被察觉,被记录下来,也没有人知道哪个是真正的信源地址。能发现的仅仅是"曾经被扫描过"。也正因为这样那些黑客们才乐此不彼地继续大量使用这种端口扫描技术来达到他们获取目标计

4、算机信息、并进行恶意攻击。二、端口扫描器在扫描过程中主要具有以下三个方面的能力:(1) 发现一个计算机或网络的能力;(2) 一旦发现一台计算机,就有发现目标计算机正在运行什么服务的能力;(3) 通过测试目标计算机上的这些服务,发现存在的漏洞的能力。 三、扫描器的原理现在假设你是A,要扫的是B 那么,通常建立3次握手的过程是 ASyn->B A<-Syn/AckB A-Ack>B 这样就建立了连接,扫描就是建立很多这样的连接,从而达到了解对方开了哪些端口,哪些服务厉害的扫描器还会进一步探测!但是,这种tcp扫描会留下大量的记录,如果B的网管聪明的话,那么他就会开始注意了。 所以

5、我们又会用半开放式扫描(syn) 也就是 ASyn->B A<-Syn/AckB A-> B A-connected?<-B 这样,由于B一直得不到确认,当然就不会记录ip啦,不过B若是很bt,那么他也会记录任何syn的 ip,那就没办法了!四、端口扫描器的设计分析过程(1)设计过程中所用到的技术在本课程设计中运用到的名字空间主要有:和System.Net。1、名称空间包含了可以给低级Winsock API提供实际的.NET接口的类。其构造函数为:Socket(AddressFamily af,SocketType st ,ProtocolType pt)其中,Addr

6、essFamily为网络类型, SocketType 为数据类型,ProtocolType为使用AddressFamily.InterNetwork枚举值。2、TcpClient类,用于在同步阻塞模式下通过网络来连接、发送和接受数据。该类有 以下3种构造函数:TcpClient() TcpClient(IPEndPoint iep) TcpClient(string host,int port) 3、发送数据要调用Sendto ()方法来实现4、获取主机地址信息 定义主机对象 IPEndPoint类 IPAddress类 获取主机信息 Dns类中常用方法 Dns.GetHostName() D

7、ns.GetHostByName(string hostname) Dns.GetHostByAddress(address) Dns.Resolve() .定义主机对象 IPEndPoint 类包含应用程序连接到主机上的服务所需的主机和端口信息。通过组合服务的主机 IP 地址和端口号,IPEndPoint 类形成到服务的连接点。常用的方法原型:public IPEndPoint(IPAddress address, int port);说明: address:IP地址 port:端口号功能:初始化IPEndPoint类的实例。用法举例: IPAddressmyServerIP=new IPA

8、ddress.Parse(“”); IPEndPoint myServer=new IPEndPoint(myServerIP,13); 5、Internet控制报文协议 ICMP的作用与特点ICMP的特点:l ICMP本身是网络层的一个协议;l ICMP差错报告采用路由器-源主机的模式,路由器在发现数据报传输出现错误时只向源主机报告差错原因;l ICMP并不能保证所有的IP数据报都能够传输到目的主机;l ICMP不能纠正差错,它只是报告差错。差错处理需要由高层协议去完成。 (2)程序设计分析(即程序设计流程)1、新建一个Windows应用程序项目,设计界面如:2、使用的名称

9、空间:(useing)System、System.ComponentModel、System.Data、System.Drawing、System.Text、System.Net。3、添加成员 public class IcmpPacket public Byte Type;/ 消息类型 public Byte SubCode;/ 子码类型 public UInt16 CheckSum;/ 校检和 public UInt16 Identifier;/ 标志符 public UInt16 SequenceNumber; / 顺序号 public Byte Data;/ 数据 / ICMP包 4、

10、对ICMP报文的操作控制 /声明常量 const int SOCKET_ERROR = -1; const int ICMP_ECHO = 8; public static Int32 Serialize(IcmpPacket packet, Byte Buffer, Int32 PacketSize, Int32 PingData) / 取得报文内容,转化为字节数组,然后计算报文的长度 Int32 cbReturn = 0; /数据报结构转化为数组 int Index = 0; Byte b_type = new Byte1; b_type0 = (packet.Type); Byte b_

11、code = new Byte1; b_code0 = (packet.SubCode); Byte b_cksum = BitConverter.GetBytes(packet.CheckSum); Byte b_id = BitConverter.GetBytes(packet.Identifier); Byteb_seq = BitConverter.GetBytes(packet.SequenceNumber); Array.Copy(b_type, 0, Buffer, Index, b_type.Length); Index += b_type.Length; Array.Copy

12、(b_code, 0, Buffer, Index, b_code.Length); Index += b_code.Length; Array.Copy(b_cksum, 0, Buffer, Index, b_cksum.Length); Index += b_cksum.Length; Array.Copy(b_id, 0, Buffer, Index, b_id.Length); Index += b_id.Length; Array.Copy(b_seq, 0, Buffer, Index, b_seq.Length); Index += b_seq.Length; / 复制数据 A

13、rray.Copy(packet.Data, 0, Buffer, Index, PingData); Index += PingData; if (Index != PacketSize/* sizeof(IcmpPacket) */) cbReturn = -1; return cbReturn; cbReturn = Index; return cbReturn; / <summary> /校验和算法 / </summary> public static UInt16 checksum(UInt16 buffer, int size) Int32 cksum =

14、0; int counter; counter = 0; /*把ICMP报头二进制数据以2字节为单位累加起来*/ while (size > 0) UInt16 val = buffercounter; cksum += Convert.ToInt32(buffercounter); counter += 1; size -= 1; /*若ICMP报头为奇数个字节,会剩下最后一字节。把最后一个字节视为一个 *2字节数据的高字节,这个2字节数据的低字节为0,继续累加*/ cksum = (cksum >> 16) + (cksum & 0xffff); cksum +=

15、 (cksum >> 16); return (UInt16)(cksum); 5、添加按钮Ping的Click 事件代码: private void button1_Click(object sender, EventArgs e) /执行PINGfor(int p=0;p<10;p+)tryint nBytes = 0;int dwStart = 0, dwStop = 0;/初始化一个ICMP类型的SocketSocket socket = new Socket(AddressFamily.InterNetwork , SocketType.Raw, ProtocolT

16、ype.Icmp);/取得目标主机的主机名IPHostEntry serverHE= Dns.GetHostByName(HostName);IPEndPoint ipepServer = new IPEndPoint(serverHE.AddressList0, 0);EndPoint epServer = (ipepServer);IPHostEntry fromHE = Dns.GetHostByName(Dns.GetHostName();IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList0, 0);EndPoin

17、t EndPointFrom = (ipEndPointFrom);int PacketSize = 0;IcmpPacket packet = new IcmpPacket();/ 构造数据报packet.Type = ICMP_ECHO; packet.SubCode = 0;packet.CheckSum = UInt16.Parse("0");packet.Identifier = UInt16.Parse("45"); packet.SequenceNumber = UInt16.Parse("0"); int PingDa

18、ta = 32; / sizeof(IcmpPacket) - 8;packet.Data = new BytePingData;/初始化 Packet.Datafor (int i = 0; i < PingData; i+)packet.Datai = (byte)'#'/保存数据报的长度PacketSize = PingData + 8;Byte icmp_pkt_buffer = new Byte PacketSize ; Int32 Index = 0;/调用Serialize方法/报文总共的字节数Index = Serialize( packet, icmp_

19、pkt_buffer, PacketSize, PingData );if( Index = -1 )return ;/ 转化为Uint16类型的数组,取得数据报长度的一半Double double_length = Convert.ToDouble(Index);Double dtemp = Math.Ceiling( double_length / 2);int cksum_buffer_length = Convert.ToInt32(dtemp);/生成一个字节数组UInt16 cksum_buffer = new UInt16cksum_buffer_length;/初始化 Uint

20、16类型 array int icmp_header_buffer_index = 0;for( int i = 0; i < cksum_buffer_length; i+ ) cksum_bufferi = BitConverter.ToUInt16(icmp_pkt_buffer,icmp_header_buffer_index);icmp_header_buffer_index += 2;/调用checksum,返回检查和UInt16 u_cksum = checksum(cksum_buffer, cksum_buffer_length);/检查和存在报文中packet.Che

21、ckSum = u_cksum; Byte sendbuf = new Byte PacketSize ; /再次检查报文大小Index = Serialize( packet, sendbuf, PacketSize, PingData );/如果有错,则报告错误if( Index = -1 )return ; /用socket发送数据报if (nBytes = socket.SendTo(sendbuf, PacketSize, 0, epServer) = SOCKET_ERROR) /初始化缓冲区.接受缓冲区/ ICMP 头 IP 头 (20 字节)Byte ReceiveBuffer

22、 = new Byte256; nBytes = 0;/接受字节流bool recd =false ;int timeout=0 ;/循环检查目标主机响应时间while(!recd)nBytes = socket.ReceiveFrom(ReceiveBuffer, 256, 0, ref EndPointFrom);if (nBytes = SOCKET_ERROR) recd=true ;break;else if(nBytes>0)recd=true;break;if(timeout>1000)recd=true;/关闭socketsocket.Close(); catch(

23、Exception Err)MessageBox.Show("PING目标主机操作失败!错误信息是:"+Err.Message,"信息提示",MessageBoxButtons.OK,MessageBoxIcon.Information);return;6、添加扫描端口的Click事件 private void button2_Click(object sender, EventArgs e) /扫描端口 try for (int i = iStart; i < iEnd; i+) TcpClient MyTCP = null; Catch catch (Exception Err) MessageBox.Show("扫描端口操作发生错误,错误信息是:" + Err.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Inf

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论