使用 nmap 检测特定 IP 地址的操作系统

Posted

技术标签:

【中文标题】使用 nmap 检测特定 IP 地址的操作系统【英文标题】:OS detection using nmap for a particular IP address 【发布时间】:2015-07-06 07:36:18 【问题描述】:

我正在尝试使用nmap 确定特定 IP 地址的操作系统。到目前为止,这是我的代码:

import java.io.*;

public class NmapFlags 
  public static void main(String[] args) throws Exception 
    try 

      String[] cmdarray =  "nmap", "-O", "66.110.59.130" ;//

      // example trying to find the OS or device detials of this Ip address//
      Process process = Runtime.getRuntime().exec(cmdarray);
      BufferedReader r = new BufferedReader(new InputStreamReader(
          process.getInputStream()));
      String s;
      while ((s = r.readLine()) != null) 
        System.out.println(s);

      

      r.close();

     catch (IOException e) 
      e.printStackTrace();
    
  

运行此代码后,我得到的是:

All 1000 scanned ports on 66.110.59.130 are filtered
All 1000 scanned ports on 66.110.59.130 are filtered
Too many fingerprints match this host to give specific OS details
Too many fingerprints match this host to give specific OS details
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
OS detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 246.06 seconds
Nmap done: 1 IP address (1 host up) scanned in 246.06 seconds**

还有其他nmap 标志可以用来检测设备类型吗?我试过 -A 选项。我需要在跟踪路由的每一跳找到设备详细信息。

【问题讨论】:

这不是java 问题,这是nmap 问题。你应该问Super User 【参考方案1】:

Nmap 执行“主动指纹识别”(它发送数据包然后分析响应)来猜测远程操作系统是什么。这些探针非常具有侵入性,我建议您阅读更多有关它的信息 (http://nmap.org/book/osdetect-fingerprint-format.html)。

“与此主机匹配的指纹太多,无法提供特定的操作系统详细信息”意味着探测相互矛盾或过于广泛。 例如在 NAT 场景中,一些端口扫描返回路由器信息(例如 Cisco ios),其他一些探测返回真实主机规范(例如 Windows)。

了解网络是如何设计的最好方法是依靠你自己基于不同探测和输出的判断。

IP ID 序列、指纹分析和服务检测 (-sV) 可以提供帮助:

e.q.如果 3389 是打开的,那么运行的操作系统是 Windows。

e.q.如果 IP ID 序列不同,则目标可能是多个(负载平衡)。

您对网络流量的分析总是比 nmap 尝试以自动方式猜测的更准确。

【讨论】:

以上是关于使用 nmap 检测特定 IP 地址的操作系统的主要内容,如果未能解决你的问题,请参考以下文章

hacker之眼Nmap的原理及用法非常常用的控制选项(-PN)

扫描探测-Nmap

nmap基本命令使用

nmap可以检测到哪些操作系统

nmap使用

nmap使用求助