计算机网络设计与安全技术 课件8 网络主机与端口扫描程序设计.pptx
《计算机网络设计与安全技术》
第8章网络主机与端口扫描程序设计;学习内容:
(1)ICMP报文分析;
(2)基于ICMP协议的主机扫描程序设计;
(3)网络端口扫描原理;
(4)网络端口扫描程序设计。
学习目标:
(1)学习原始套接字编程方法,能够编写主机扫描程序;
(2)深入理解ICMP协议,能够编程实现多线程端口扫描功能。;8.1?ICMP报文分析;4;表8.1??ICMP类型与代码描述;4;ping是响应请求(类型=8)和应答(类型=0)。
一台主机向一个节点发送一个类型=8的ICMP报文,如果途中没有异常(例如,被路由器丢弃、目标不回应ICMP或传输失败),则目标返回类型=0的ICMP报文,说明这台主机存在。
;通过计算ICMP报文通过的节点来确定主机与目标之间的网络距离。;ICMP协议对网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器和主机。
利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“PingofDeath”(死亡之Ping)攻击。“PingofDeath”的攻击原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机(现在的操作系统已经限制了发送ICMP数据包的大小)。
向目标主机长时间、连续、大量地发送ICMP数据包,也会使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理。;8.2?基于ICMP协议的主机扫描程序设计;11;8.2.2主机扫描程序设计;8.3?网络端口扫描原理;网络进程通信需要收发双方构成全相关。;表8.2??常见的熟知端口及其应用协议;8.3.2端口扫描技术分析;(1)TCPconnect()扫描;(2)TCPSYN扫描:半开放扫描;(3)TCPFIN扫描;(4)TCPACK扫描;(5)NULL扫描;(6)XMAS扫描;(7)SYN/ACK扫描;8.4?网络端口扫描程序设计;8.4.3具有人机界面的端口扫描程序;privatevoidNormalScan(Objectstate)
{
? Int32port=(Int32)state;
? stringtMsg=;
???? TcpClienttcp=newTcpClient();
???? try
???? {
?????? tcp.Connect(scanHost,port);
? portSum++;
??????? tMsg=port.ToString()+端口开放。;
??????? portList.Items.Add(tMsg);
??????? tcp.Close();
???? }
???? catch
????? {
???????? tcp.Close();
???? }
};8.4.4多线程端口扫描程序设计示例;//设置最大线程数
ThreadPool.SetMaxThreads(setThreadNum,setThreadNum);
for(Int32threadNum=startPort;threadNum=endPort;threadNum++)
{
ThreadPool.QueueUserWorkItem(newWaitCallback(StartScan),threadNum);
};publicvoidStartScan(Objectstate)
{
Int32port=(Int32)state;
stringtMsg=;
stringgetData=;
connState++;//判断线程数目
try
{
TcpClienttcp=newTcpClient();
tcp.Connect(scanHost,port);
portSum++;
tMsg=port.ToString()+端口开放。;
portListArray[portSum-1]=tMsg;
Streamsm=tcp.GetStream();
sm.Write(Encoding.Default.GetBytes(tMsg.ToCharArray()),0,tMsg.Length);
StreamReadersr=newStreamReader(tcp.GetStream(),Encoding.Default);
try
{