NMAP使用实例(三)

虽然Nmap这些年来功能越来越多,它也是从一个高效的端口扫描器开始的,并且那仍然是它的核心功能。nmap target这个简单的命令扫描主机target上的超过1660TCP端口。许多传统的端口扫描器只列出所有端口是开放还是关闭的,Nmap的信息粒度比它们要细得多。 它把端口分成六个状态: open(开放的)closed(关闭的)filtered(被过滤的)unfiltered(未被过滤的)open|filtered(开放或者被过滤的),或者 closed|filtered(关闭或者未被过滤的)。这些状态并非端口本身的性质,而是描述Nmap怎样看待它们。例如,对于同样的目标机器的135/tcp端口,从同网络扫描显示它是开放的,而跨网络作完全相同的扫描则可能显示它是filtered(被过滤的)。

 

Nmap所识别的6个端口状态。

open(开放的)

应用程序正在该端口接收TCP 连接或者UDP报文。发现这一点常常是端口扫描 的主要目标。安全意识强的人们知道每个开放的端口都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。 而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。

  

closed(关闭的)

关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行up 也对部分操作系统探测有所帮助。因为关闭的关口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。系统管理员可能会考虑用防火墙封锁这样的端口。那样他们就会被显示为被过滤的状态,下面讨论。

  

filtered(被过滤的)

由于包过滤阻止探测报文到达端口,Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供任何信息。有时候它们响应ICMP错误消息如类型3代码13 (无法到达目标: 通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧,不做任何响应。这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。 这使得扫描速度明显变慢。

  

unfiltered(未被过滤的)

未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定端口是否开放。

  

open|filtered(开放或者被过滤的)

当无法确定端口是开放还是被过滤的,Namp就把该端口划分成这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。UDPIP协议,FINNull,和Xmas扫描可能把端口归入此类。

 

closed|filtered(关闭或者被过滤的)

该状态用于Nmap不能确定端口是关闭的还是被过滤的。它只可能出现在IPID  Idle扫描中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为AI语言模型,我无法实际运行代码,但我可以提供一些Java nmap的示例供您参考: 1. 使用Java nmap获取设备IP地址 ``` import org.nmap4j.Nmap4j; import org.nmap4j.data.NMapRun; import org.nmap4j.parser.ParseException; public class GetIpAddress { public static void main(String[] args) { try { Nmap4j nmap4j = new Nmap4j("nmap -sn 192.168.1.0/24"); nmap4j.execute(); NMapRun nmapRun = nmap4j.getResult(); String ipAddress = nmapRun.getHosts().getHosts().get(0).getAddresses().get(0).getAddr(); System.out.println("IP address: " + ipAddress); } catch (ParseException e) { e.printStackTrace(); } } } ``` 2. 使用Java nmap扫描网络端口 ``` import org.nmap4j.Nmap4j; import org.nmap4j.data.NMapRun; import org.nmap4j.parser.ParseException; public class ScanPorts { public static void main(String[] args) { try { Nmap4j nmap4j = new Nmap4j("nmap -sT -p 80,443 192.168.1.1"); nmap4j.execute(); NMapRun nmapRun = nmap4j.getResult(); String openPorts = nmapRun.getHosts().getHosts().get(0).getPorts().getPorts().toString(); System.out.println("Open ports: " + openPorts); } catch (ParseException e) { e.printStackTrace(); } } } ``` 3. 使用Java nmap进行操作系统检测 ``` import org.nmap4j.Nmap4j; import org.nmap4j.data.nmaprun.Host; import org.nmap4j.data.nmaprun.NMapRun; import org.nmap4j.parser.ParseException; public class DetectOs { public static void main(String[] args) { try { Nmap4j nmap4j = new Nmap4j("nmap -O 192.168.1.1"); nmap4j.execute(); NMapRun nmapRun = nmap4j.getResult(); Host host = nmapRun.getHosts().getHosts().get(0); String os = host.getOs().getOsMatches().get(0).getName(); System.out.println("Operating system: " + os); } catch (ParseException e) { e.printStackTrace(); } } } ``` 请注意,您需要在项目中添加nmap4j依赖项才能运行这些示例。您可以在以下位置找到nmap4j:https://github.com/sroberts/nmap4j。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值