如何使用Nmap进行端口扫描(一)什么是端口?

端口只是一种软件中的抽象概念,用于区分通信信道。 这与IP地址用于识别网络上的计算机的方式类似,端口用来标识在单个计算机上使用的特定应用程序。例如,你的Web浏览器将默认连接到HTTP URLs中的TCP端口80。 如果您指定安全的HTTPS协议,浏览器将默认尝试端口443。
Nmap中所用的两个使用端口的协议是:TCP和UDP。每个协议的连接由四个元素唯一标识:源和目标的IP地址以及相应的源和目标的端口。所有这些元素都只是放在主机之间发送的每个数据包的标头中的数字。协议的类型是通过一个8位二进制字段表示,它指定IP数据(有效载荷)部分中包含的数据包类型。例如,TCP是协议号6,UDP是17。IPv4地址的长度是32位,而端口是16位长。 IPv6地址长度为128位。 
因为大多数流行的服务都注册了一个众所周知的端口号,所以通常可以猜测开放端口代表什么服务。Nmap包含一个nmap-services文件,其中包含已知的已注册端口号和协议号,以及一些常见的***后门端口和其他没有注册Internet Assigned Numbers Authority(IANA)的应用程序的端口。
由于端口号字段为16位宽,因此值可以达到65,535。最低可能值0无效。Berkeley套接字API定义了通常为网络通信编写程序的方式,它不允许使用端口0。相反,它将端口0请求解释为通配符,这意味着程序员可以不关心使用哪个端口,由操作系统选择可用的端口号。例如,程序员很少关心用于传出连接的源端口号。 因此,他们将其设置为零,让操作系统选择一个。
虽然端口0无效,但没有什么能阻止某人在头字段中指定它。 一些恶意***后门侦听受感染系统的端口0,作为提供非法访问的隐秘方式,而不会出现在大多数端口扫描上。 为了解决这个问题,Nmap确实允许在明确指定时扫描端口0(例如-p0-65535)。
第一类有效端口(编号1到1,023)称为保留端口。Unix系统(与Windows不同)要求应用程序具有特殊(root)权限,以便绑定和侦听这些端口。这样做是基于一个想法:远程用户连接到这些端口就可以认为他们正在连接到管理员启动的有效服务,而不是某些恶意、无特权用户。如果SSH的注册端口是2,222而不是22,则恶意用户可以在该端口上启动流氓SSH守护程序,从任何连接的人那里收集密码。由于大多数常见服务器应用程序都会在保留端口上进行侦听,因此扫描这些端口通常效果最佳。
端口范围是另一类端口。系统可以根据需要使用此端口池进行分配。 当应用程序指定端口0时(表示“任何端口”),系统将从此范围中选择一个端口。端口范围因操作系统而异,通常可配置。 它应包含至少几千个端口,以避免在许多并发连接打开时耗尽。Nmap连接扫描可以一次使用数百个,因为它扫描每台目标计算机上的每个指定端口。在Linux上,您可以使用文件/proc/sys/net/ ipv4/ip_local_port_range查看或设置范围。

猜你喜欢

转载自blog.51cto.com/14857544/2512819