美文网首页命令行工具
提取“便携版” Nmap

提取“便携版” Nmap

作者: 舌尖上的大胖 | 来源:发表于2020-02-27 15:44 被阅读0次

    一、背景说明

    Nmap 是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

    Nmap 套件中,还包含的 Ncat 和 Nping 功能强大且更为通用的工具。尤其是 Ncat,被称为“网络工具箱里的『瑞士军刀』”,能胜任除扫描外更为通用的一些功能。详情参见 Ncat Users' Guide《Ncat 使用方法整理》

    在 Linux 上,Nmap 的安装一般需要通过源码编译或者安装 rpm 包的方式来进行。但是在实际应用场景中,生产环境的服务器可能不具备编译环境,或者不具备权限进行安装工作,导致无法使用。本文的目标是提取出一个无需安装的“便携版”,解决因环境因素不能安装的问题。

    二、提取“绿色版”

    1、问题分析

    Nmap 之所以需要安装,是因为存在依赖库,并需要把依赖的库复制到系统的特定位置,还需要集成帮助文档。对于“便携版”来说,可以把依赖的库放到有权限访问的位置,文档的集成先不需要。所以理论上可行。

    本文以 CentOS 7.6 为例,提取 Nmap 便携版。

    2、必备文件列表

    安装命令:

    $ sudo yum install -y nmap
    

    安装成功后,提取以下文件:

    /usr/bin/ncat
    /usr/bin/ndiff
    /usr/bin/nmap
    /usr/bin/nping
    /usr/lib64/libpcap.so.1 → libpcap.so.1.5.3
    

    其中的 /usr/lib64/libpcap.so.1 是应用程序依赖的库。为了多版本库并存,所以 libpcap.so.1 作为一个 SymbolLink 存在,指向实际文件的不同版本,如:libpcap.so.1.5.3,在收集文件时,根据实际情况选择版本。但是软件在访问的时候,还是会读取 libpcap.so.1

    通过如下命令创建 SymbolLink:

    $ ln -sf 'libpcap.so.1.5.3' 'libpcap.so.1'
    

    3、解决库的访问路径问题

    (1)文件整理

    通过前面的步骤,已经把文件搜集齐,集中放到有权限访问的位置,假设存放在 ~/portable_nmap/,文件列表如下:

    ~/portable_nmap/ncat
    ~/portable_nmap/ndiff
    ~/portable_nmap/nmap
    ~/portable_nmap/nping
    ~/portable_nmap/libpcap.so.1
    ~/portable_nmap/libpcap.so.1.5.3
    

    其中的 libpcap.so.1 为 SymbolLink,指向 libpcap.so.1.5.3

    (2)执行

    执行 nmap 或者 ncat,发现还是报找不到库的错误。

    原因是 Linux 与 Windows 对于动态链接库搜索的机制不同导致的。Windows 会优先搜索当前路径和可执行文件所在目录,但 Linux 只会搜索系统指定的位置,但这些位置基本都需要访问权限,为了规避权限问题,不能使用这些位置。所以我们需要让系统到我们指定的位置搜索需要的动态链接库。参考《Linux 指定动态库搜索路径五种方法及优先级》

    我们采用指定环境变量的方法:

    $ export LD_LIBRARY_PATH=~/portable_nmap
    

    运行成功。

    三、配置运行脚本

    前面已经把用到的文件、执行原理和配置说清楚介绍完,这里提供一个用于设置运行环境的脚本,主要完成以下工作:

    • libpcap.so.1.5.3 在相同目录创建 SymbolLink libpcap.so.1
    • 为文件赋予可执行权限
    • 设置 PATH 环境变量,保证在任何位置都可以使用可执行文件
    • 设置 LD_LIBRARY_PATH 环境变量,用于指定动态链接库 libpcap.so.1 的搜索位置

    此脚本用于设置执行环境,需要与之前提取的 Nmap 可执行文件存放在相同目录。

    # setup.sh
    # 此脚本用于设置执行环境,应与其余 Nmap 文件放在相同目录
    
    set -u
    
    # 获取脚本所在路径
    BASH_SOURCE_NAME=${BASH_SOURCE[0]}
    SCRIPT_FILE=$(readlink -f "${BASH_SOURCE_NAME}")
    BASE_PATH_NMAP=$(dirname "${SCRIPT_FILE}")
    
    # 创建动态链接库的链接
    ln -sf "${BASE_PATH_NMAP}/libpcap.so.1.5.3" "${BASE_PATH_NMAP}/libpcap.so.1"
    
    # 为文件赋予执行权限
    chmod 755 "${BASE_PATH_NMAP}"/*
    
    # 设置 PATH 环境变量
    PATH=${PATH}:${BASE_PATH_NMAP}
    
    # 设置访问动态链接库的环境变量
    export LD_LIBRARY_PATH=${BASE_PATH_NMAP}
    

    脚本执行方式:

    $ . setup.sh
    # 或
    $ source setup.sh
    

    注意:

    必须通过 .source 来执行此脚本,不能在新启动的 Shell 中运行此脚本。

    执行脚本后,切换到任何路径都能正常执行 nmapncat 命令,表示配置成功。

    四、完整收集脚本

    通过上述过程已经可以整理出一份便携版的 Nmap,并且可以正常运行。

    这里把上面的过程整理成一个脚本,用于:

    • 将需要的文件收集到一起
    • 同时生成用于配置的脚本

    此脚本在已经安装了 Nmap 的环境执行,就可以把相关文件收集到一起,同时生成配置运行脚本,并存放到相同目录下。

    #!/bin/bash
    
    # nmap_packager.sh
    # 此脚本在已经安装了 Nmap 的环境执行,用于把相关文件收集到一起,同时生成`配置运行脚本`,并存放到相同目录下
    
    set -eux
    
    # 获取收集内容存放的目录,默认放在 ~/portable_nmap
    NMAP_PATH=${1:-~/portable_nmap}
    
    # 创建目录
    mkdir -p "${NMAP_PATH}"
    
    # 复制文件
    cp /usr/bin/ncat "${NMAP_PATH}/"
    cp /usr/bin/ndiff "${NMAP_PATH}/"
    cp /usr/bin/nmap "${NMAP_PATH}/"
    cp /usr/bin/nping "${NMAP_PATH}/"
    cp /usr/lib64/libpcap.so.1.5.3 "${NMAP_PATH}/"
    
    # 生成配置脚本 setup.sh
    cat << EOF > "${NMAP_PATH}/setup.sh"
    
    set -u
    
    # 获取脚本所在路径
    BASH_SOURCE_NAME=\${BASH_SOURCE[0]}
    SCRIPT_FILE=\$(readlink -f "\${BASH_SOURCE_NAME}")
    BASE_PATH_NMAP=\$(dirname "\${SCRIPT_FILE}")
    
    # 创建动态链接库的链接
    ln -sf "\${BASE_PATH_NMAP}/libpcap.so.1.5.3" "\${BASE_PATH_NMAP}/libpcap.so.1"
    
    # 为文件赋予执行权限
    chmod 755 "\${BASE_PATH_NMAP}"/*
    
    # 设置 PATH 环境变量
    PATH=\${PATH}:\${BASE_PATH_NMAP}
    
    # 设置访问动态链接库的环境变量
    export LD_LIBRARY_PATH=\${BASE_PATH_NMAP}
    
    EOF
    

    收集到的文件可以复制到需要的环境,并执行其中的 setup.sh 来进行环境初始化后,即可使用 Nmap 相关功能。

    本文讲述过程及脚本在 CentOS 7.6 中验证测试通过。

    (完)

    相关文章

      网友评论

        本文标题:提取“便携版” Nmap

        本文链接:https://www.haomeiwen.com/subject/lzxxhhtx.html