如何使用 Nmap 扫描开放端口

2023-11-16

介绍

对于许多崭露头角的系统管理员来说,网络是一个广泛且令人难以承受的主题。有各种层、协议和接口,以及许多必须掌握才能理解它们的工具和实用程序。

在 TCP/IP 和 UDP 网络中,ports是逻辑通信的端点。单个 IP 地址可能运行许多服务,例如 Web 服务器、应用程序服务器和文件服务器。为了使每个服务能够进行通信,它们各自在特定端口上进行侦听和通信。当您连接到服务器时,您将连接到 IP 地址和端口。

在许多情况下,您使用的软件会为您指定端口。例如,当您连接到https://digitalocean.com,您正在连接到digitalocean.com端口上的服务器443,安全 Web 流量的默认端口。由于这是默认设置,您的浏览器会为您添加端口。

在本教程中,您将更详细地探索端口。您将使用netstat程序识别开放端口,然后使用nmap程序获取有关网络上机器端口状态的信息。完成后,您将能够识别常见端口并扫描系统以查找开放端口。

Note: 本教程涵盖 IPv4 安全性。在 Linux 中,IPv6 安全性与 IPv4 分开维护。例如,“nmap”默认扫描 IPv4 地址,但如果指定了正确的选项 (nmap -6),也可以扫描 IPv6 地址。

如果您的 VPS 配置为 IPv6,请记住使用适当的工具保护您的 IPv4 和 IPv6 网络接口。有关 IPv6 工具的更多信息,请参阅此指南:如何配置工具以在 Linux VPS 上使用 IPv6

了解端口

里面有很多层OSI网络模型. The 传输层该层主要涉及不同服务和应用程序之间的通信。

该层是与端口关联的主要层。

要理解端口配置,需要一些术语知识。以下是一些术语,可帮助您理解接下来的讨论:

  • Port:在操作系统内部实现的可寻址网络位置,有助于区分发往不同应用程序或服务的流量。

  • 互联网插座:文件描述符,指定 IP 地址和关联的端口号,以及用于处理数据的传输协议。

  • Binding:当应用程序或服务使用互联网套接字处理其输入和输出的数据时发生的过程。

  • 听力:当服务绑定到端口/协议/IP 地址组合以等待来自服务客户端的请求时,该服务被称为“监听”端口。

收到请求后,它会使用它一直侦听的同一端口与客户端建立连接(在适当的情况下)。由于所使用的互联网套接字与特定的客户端 IP 地址相关联,因此这不会阻止服务器同时监听其他客户端的请求并为其提供服务。

  • 端口扫描:端口扫描是尝试连接到多个连续端口的过程,目的是获取有关哪些端口是开放的以及它们背后有哪些服务和操作系统的信息。

识别常用端口

端口由范围为以下的数字指定1 to 65535.

  • 下面有很多端口1024与 Linux 和类 Unix 操作系统认为对基本网络功能至关重要的服务相关联,因此您必须拥有 root 权限才能为它们分配服务。

  • 之间的端口1024 and 49151被视为“已注册”。这意味着它们可以通过向 IANA(互联网号码分配机构)发出请求来“保留”(从广义上讲)某些服务。它们没有严格执行,但它们可以提供有关某个端口上可能运行的服务的线索。

  • 之间的端口49152 and 65535无法注册,建议私人使用。

由于有大量可用端口,您不必担心大多数绑定到特定端口的服务。

然而,有一些端口因其普遍存在而值得了解。以下只是一个非常不完整的列表:

  • 20:FTP 数据
  • 21:FTP控制端口
  • 22: SSH
  • 23:Telnet(不安全,不推荐用于大多数用途)
  • 25: SMTP
  • 43:WHOIS 协议
  • 53: DNS 服务
  • 67: DHCP 服务器端口
  • 68: DHCP 客户端端口
  • 80:HTTP - 未加密的网络流量
  • 110:POP3邮件端口
  • 113:IRC 网络上的身份验证服务
  • 143:IMAP邮件端口
  • 161: SNMP
  • 194: IRC
  • 389:LDAP 端口
  • 443:HTTPS - 安全网络流量
  • 587:SMTP-消息提交端口
  • 631:CUPS 打印守护进程端口
  • 666:DOOM - 这款传统游戏实际上有自己的特殊端口

这些只是通常与端口相关的一些服务。您应该能够在各自的文档中找到适合您尝试配置的应用程序的端口。

大多数服务可以配置为使用默认端口以外的端口,但您必须确保客户端和服务器都配置为使用非标准端口。

您可以通过查看获得一些常见端口的列表/etc/services file:

  1. less/etc/服务

它将为您提供常见端口及其相关服务的列表:

Output
. . . tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol . . .

根据您的系统,这将显示多个页面。按SPACE键查看下一页条目或按Q返回到您的提示。

这不是一个完整的列表;你很快就会看到这一点。

检查开放端口

您可以使用多种工具来扫描开放端口。大多数 Linux 发行版上默认安装的一个是netstat.

您可以通过发出带有以下参数的命令来快速发现正在运行的服务:

  1. sudo netstat -plunt

您将看到如下结果:

Output
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd tcp6 0 0 :::22 :::* LISTEN 785/sshd

这显示了与服务关联的端口和侦听套接字,并列出了 UDP 和 TCP 协议。

The nmap工具是另一种可用于识别端口的方法。

使用 Nmap

保护网络安全的一部分涉及进行漏洞测试。这意味着尝试渗透您的网络并以与攻击者相同的方式发现弱点。

在所有可用的工具中,nmap也许是最常见和最强大的。

您可以安装nmap在 Ubuntu 或 Debian 机器上输入:

  1. sudo apt-get update
  2. sudo apt-get install nmap

安装此软件的附带好处之一是改进的端口映射文件。通过查看此文件,您可以看到端口和服务之间更广泛的关联:

  1. less/usr/share/nmap/nmap-services

你会看到这样的输出:

Output
. . . tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078] tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer compressnet 2/tcp 0.000013 # Management Utility compressnet 2/udp 0.001845 # Management Utility compressnet 3/tcp 0.001242 # Compression Process compressnet 3/udp 0.001532 # Compression Process unknown 4/tcp 0.000477 rje 5/udp 0.000593 # Remote Job Entry unknown 6/tcp 0.000502 echo 7/tcp 0.004855 echo 7/udp 0.024679 echo 7/sctp 0.000000 . . .

除了近 2 万行之外,该文件还包含其他字段,例如第三列,其中列出了在互联网上进行研究扫描时发现的该端口的开放频率。

使用nmap扫描端口

Nmap 可以揭示有关主机的大量信息。它还可以使目标系统的系统管理员认为有人有恶意。因此,仅在您拥有的服务器上或在您已通知所有者的情况下对其进行测试。

The nmap创建者提供了一个测试服务器,位于scanme.nmap.org.

这个或您自己的服务器是练习 nmap 的良好目标。

以下是一些可以使用 nmap 执行的常见操作。我们将使用 sudo 权限运行它们,以避免返回某些查询的部分结果。有些命令可能需要很长时间才能完成:

扫描主机操作系统:

  1. sudo nmap -O scanme.nmap.org

跳过网络发现部分并假设主机在线。如果您在其他测试中收到“注意:主机似乎已关闭”的回复,这会很有用。将其添加到其他选项中:

  1. sudo nmap -PN scanme.nmap.org

扫描时无需对指定的 IP 地址执行反向 DNS 查找。在大多数情况下,这应该会加快您的结果:

  1. sudo nmap -n scanme.nmap.org

扫描特定端口而不是所有常见端口:

  1. sudo nmap -p 80 scanme.nmap.org

要扫描 TCP 连接,nmap 可以与目标端口执行 3 次握手(如下所述)。像这样执行它:

  1. sudo nmap -sT scanme.nmap.org

要扫描 UDP 连接,请键入:

  1. sudo nmap -sU scanme.nmap.org

扫描每个 TCP 和 UDP 开放端口:

  1. sudo nmap -n -PN -sT -sU -p- scanme.nmap.org

TCP“SYN”扫描利用 TCP 建立连接的方式。

为了启动 TCP 连接,请求端向服务器发送“同步请求”数据包。然后服务器发回“同步确认”数据包。然后,原始发送者将“确认”数据包发送回服务器,并建立连接。

然而,当第一个数据包从服务器返回时,“SYN”扫描会断开连接。这称为“半开放”扫描,并被宣传为一种秘密扫描端口的方法,因为与该端口关联的应用程序不会接收流量,因为连接永远不会完成。

随着更先进的防火墙的采用以及许多配置中不完整 SYN 请求的标记,这不再被认为是隐秘的。

要执行 SYN 扫描,请执行:

  1. sudo nmap -sS scanme.nmap.org

一种更隐蔽的方法是发送无效的 TCP 标头,如果主机符合 TCP 规范,则在该端口关闭时应该发送回数据包。这适用于非基于 Windows 的服务器。

您可以使用“-sF”、“-sX”或“-sN”标志。它们都会产生我们正在寻找的响应:

  1. sudo nmap -PN -p 80 -sN scanme.nmap.org

要查看主机上运行的服务版本,您可以尝试此命令。它尝试通过测试来自服务器的不同响应来确定服务和版本:

  1. sudo nmap -PN -p 80 -sV scanme.nmap.org

最后,您可以使用nmap扫描多台机器。

要使用“-”或“/24”指定 IP 地址范围以一次扫描多个主机,请使用如下命令:

  1. sudo nmap -PN xxx.xxx.xxx.xxx-yyy

或者使用如下命令扫描网络范围以获取可用服务:

  1. sudo nmap -sP xxx.xxx.xxx.xxx-yyy

您还可以使用许多其他命令组合,但这应该可以帮助您开始探索网络漏洞。

结论

了解端口配置以及如何发现服务器上的攻击媒介只是保护您的信息和 VPS 安全的第一步。然而,这是一项基本技能。

发现哪些端口是开放的,以及可以从这些端口上接受连接的服务中获取哪些信息,可以为您提供锁定服务器所需的信息。从您的计算机泄漏的任何无关信息都可能被恶意用户用来尝试利用已知漏洞或开发新漏洞。他们能弄清楚的越少越好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Nmap 扫描开放端口 的相关文章

  • 当机器人攻击时! [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Hapijs 在一个连接上同时使用 Http 和 Https

    New to Hapijs http hapijs com 并尝试使用它来创建一个应用程序 该应用程序对所有请求使用 HTTPS 并将 HTTP 重定向到安全连接 问题是应用程序进入 HTTPS 模式没有问题 但如果我将 URL 更改为 H
  • 如何防止我的 servlet 被其他网站调用

    好的 我有一个像这样的简单的 servlet public class SimpleServlet extends HttpServlet public void doPost HttpServletRequest req HttpServ
  • 在 ASP.NET MVC 3 应用程序中设置 ashx 处理程序的自动化规则

    我正在 MVC 3 应用程序中实现 javascript 文件上传功能 因此我需要使用 Http 处理程序 ashx 来允许大文件上传 现在我需要以某种方式禁止未经身份验证的用户调用处理程序的方法 如果我有一个控制器 我只需对其应用 Aut
  • 在表单中重新填充密码字段会产生安全问题吗?

    我想知道当其他字段未验证时是否应该重新填充表单中的 屏蔽的 密码字段 我在网上看到过两种形式 重新填充屏蔽密码字段 清空密码字段 因此用户需要再次输入它 即使它是有效的 你的最佳实践是什么 重新填充密码字段是否表明存在安全漏洞 就可用性而言
  • 在java中设置Process对象的安全性

    有人可以告诉我如何限制通过进程对象访问系统属性吗 如果我通过进程对象运行以下代码 我可以抛出安全异常吗 System getProperty user home 请告诉我如何为流程对象配置证券 在ProcessBuilder类文档中 环境方
  • 是否可以通过样式表进行跨域攻击?

    我需要为我的 Web 应用程序的用户创建的网页实现灵活的样式系统 理想情况下 我希望允许他们使用 CSS 正在链接到用户定义的 url 处的样式表Bad Idea Why 可以安全地做到这一点吗 您对此有何看法 我试图避免构建样式 编辑器
  • 使用 authlogic_api 进行 Rails REST API 访问

    我正在为 Steam 游戏编写 Rails 后端 API 该游戏只能通过 REST 调用访问 因此不需要特定于用户的身份验证 我正在努力实施authlogic api 插件 http github com phurni authlogic
  • 使用 PHP 安全连接 MySQL 的最佳方法[重复]

    这个问题在这里已经有答案了 我想了解一下你们认为使用 PHP 连接到 MySQL 数据库的最安全方法 目前我正在做的方式是一个实用程序 PHP 文件 我将其包含在所有其他 PHP 文件的顶部 实用程序 PHP 文件是这样的 有什么建议么 建
  • 处理 PHP 中的会话劫持

    阅读了 Stackoverflow 上有关会话劫持的许多问题 我发现验证用户会话的唯一 解决方案 是检查用户代理 这是一个薄弱的保护层 我什至懒得去检查实施它 所以 我想知道你们实施了哪些解决方案 您是否使用 PHP 的本机会话或者是否有更
  • CAS(代码访问安全)的目的是什么?

    我参与过很多 Web 应用程序 但从未使用过 CAS 也许也从未觉得有必要使用它 什么时候需要使用CAS 人们真的在他们的应用程序中使用它吗 CAS 实际上只在桌面应用程序中有用 可以这么说 在桌面应用程序中 您想要限制通过网络 例如 运行
  • 使用您正在散列的内容的散列作为盐?

    假设用户注册了您的网站 您对他们选择的密码进行哈希处理 然后使用该哈希值作为盐 并使用该盐重新哈希其密码 Example String hash1 MD5 password String endHash MD5 hash1 password
  • 在 C# 中创建我的对称密钥

    一直在审查一些对称加密方法 我看到了很多在类中硬编码私有静态变量的示例 通常类似于 string key THISISYOURENCRYPTIONKEY 然后在更远的地方 代码使用它来加密 解密 抛开正确的实现 算法 策略以及存储它的位置
  • 什么是监控网络活动的好工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我经营的是小区 现在我正在寻找一个在服务器 Windows 或 Linux 上运行的监控工具 它可以跟踪
  • set-key-partition-list codesign 后仍提示密钥访问

    我正在导入一个PEM使用以下命令包含我的代码签名身份的公钥和私钥的文件 security import PEM FILE k Library Keychains login keychain T usr bin codesign T usr
  • 评估 CRC-32 实现中的差异

    我见过相同基本 CRC 32 算法的许多不同实现 如下所示 int remain int sbox SIZESBOX int dividend int bit for dividend 0 dividend lt SIZESBOX divi
  • Symfony2 Secure by IP 不起作用

    在我的 Symfony 2 3 1 Security YML 中 我有这一行 安全 yml access control path mysecurearea roles IS AUTHENTICATED ANONYMOUSLY ip 0 0
  • 为什么 RFC 6797 禁止通过纯 HTTP 响应发送 Strict-Transport-Security 标头?

    在阅读 HSTS 严格传输安全 规范时 我看到了一条禁令第 7 2 节 https www rfc editor org rfc rfc6797 section 7 2禁止在通过 http 而不是 https 访问时发送标头 HSTS 主机
  • RSA SignatureException:签名长度不正确

    我在签署 rsa 签名时遇到问题 我有一个用私钥加密的签名 然而 当我尝试使用公钥验证它时遇到问题 我得到以下异常 java security SignatureException Signature length not correct
  • Mac 应用程序商店 - 尝试让加密发挥作用。 。 。我缺少什么?

    我正在尝试使用 Alan Quartermain 的解决方案 如该问题所链接 Mac App Store 收据验证码 https stackoverflow com questions 4261348 mac app store recei

随机推荐

  • 如何在 Debian 9 上安装 Plex 媒体服务器

    Plex 是一款流媒体服务器 可让您组织视频 音乐和照片收藏 并将它们随时随地流式传输到您的所有设备 本教程介绍了如何安装Plex 媒体服务器在 Debian 9 上 先决条件 您登录时必须拥有的用户须藤权限能够安装软件包 安装 Plex
  • 如何在 CentOS 7 上安装 Vagrant

    Vagrant是一个用于构建和管理虚拟机环境的开源命令行工具 默认情况下 Vagrant 可以在 VirtualBox Hyper V 和 Docker 之上配置计算机 其他提供商如 Libvirt KVM VMware 和 AWS 可以通
  • 如何在 Ubuntu 18.04 上安装和配置 Redis

    Redis 是一个开源的内存数据结构存储 它可以用作数据库 缓存和消息代理 并支持各种数据结构 如字符串 哈希 列表 集合等 Redis 通过 Redis Sentinel 提供高可用性 包括监控 通知 自动故障转移 它还通过 Redis
  • 如何在 Ubuntu 18.04 上安装 IntelliJ IDEA

    智能IDEA是一个功能齐全的 IDEJVM和安卓开发 它具有内置的调试支持 Docker and Docker 组合支持 嵌入式Git控制 集成了主要的构建自动化工具 例如Maven and Gradle 语法高亮 代码完成 ssh终端 代
  • 如何在 Debian 9 上安装 Tomcat 8.5

    Apache Tomcat 是一个开源应用程序服务器 支持 Java Servlet JavaServer Pages Java 表达式语言和 Java WebSocket 技术 它是当今世界上使用最广泛的应用程序和 Web 服务器之一 本
  • Linux 中的命令

    at是一个命令行实用程序 允许您安排在特定时间执行的命令 创建的职位at仅执行一次 在这篇文章中 我们将解释如何使用at及其配套实用程序batch atq atrm查看 删除和创建稍后执行的作业 安装中at 根据分布情况 at您的 Linu
  • 如何在 Ubuntu 18.04 上安装 Webmin

    Webmin是一个用于 Linux UNIX 系统管理的开源 Web 控制面板 Webmin 允许您管理用户 组 磁盘配额以及配置最流行的服务 包括 Web FTP 电子邮件和数据库服务器 在本教程中 我们将向您展示如何在 Ubuntu 1
  • 如何在 Ubuntu 20.04 上安装 Nvidia 驱动程序

    本文介绍如何在 Ubuntu 20 04 上安装 NVIDIA 驱动程序 如果您的 Ubuntu 机器有 NVIDIA GPU 您可以选择开源驱动程序Nouveau以及 NVIDIA 的专有驱动程序 默认情况下 Ubuntu 使用 Nouv
  • 如何列出和删除 UFW 防火墙规则

    UFW 代表简单防火墙 是一个用户友好的前端 用于管理 iptables netfilter 防火墙规则 它是默认的防火墙配置工具Ubuntu并且也可用于其他流行的 Linux 发行版 例如Debian和 Arch Linux 在本教程中
  • 如何在 Vue.js 中使用样式和类绑定

    介绍 在本文中 您将了解 Vue js 中的动态样式和类绑定 随着v bind style指令 您将在单击事件上可视化字体大小 和v bind class 您将观察如何将多个类应用于元素 虽然这可以通过 DOM 操作实现 但 Vue js
  • SQL 类似 - SQL 不类似

    SQL LIKE 与 WHERE 子句一起使用来搜索列的模式 通配符是用于指定模式的通配符 有两个通配符与 LIKE 运算符一起使用 用百分比来表示一次 多次或不出现的情况 下划线用于表示单个字符 To use SQL LIKE opera
  • Spring Security 基于角色的访问授权示例

    今天我们将研究 Spring Security 基于角色的访问和授权示例 然而 在阅读这篇文章之前 请先阅读我之前关于 Spring 4 Security MVC 登录注销示例 以获取有关 Spring 4 Security 的一些基本知识
  • 如何在 Python 3 中构造 For 循环

    在计算机编程中使用循环使我们能够自动化并多次重复类似的任务 在本教程中 我们将介绍 Pythonfor loop A for循环基于循环计数器或循环变量实现代码的重复执行 这意味着for当进入循环之前已知迭代次数时 最常使用循环 这与whi
  • Python静态方法

    Python静态方法 In this quick post we will learn how to create and use a Python static method We will also have a look at wha
  • 如何在 Ubuntu 14.04 上使用 Let's Encrypt 保护 HAProxy

    介绍 Let s Encrypt 是一个新的证书颁发机构 CA 它提供了一种获取和安装免费 TLS SSL 证书的简单方法 从而在 Web 服务器上启用加密的 HTTPS 它通过提供软件客户端 Certbot 来简化流程 该客户端尝试自动执
  • 如何在 Ruby 中使用数组

    介绍 An array是一个表示值列表的数据结构 称为elements 数组允许您在单个变量中存储多个值 在 Ruby 中 数组可以包含任何数据类型 包括数字 字符串和其他 Ruby 对象 这可以压缩和组织您的代码 使其更具可读性和可维护性
  • Python unittest - 单元测试示例

    今天我们将学习Python单元测试并浏览Python单元测试示例程序 在之前的教程中我们了解了python zip 函数 Python单元测试 Python unittest 模块用于测试源代码单元 假设 您需要测试您的项目 您知道该函数将
  • 如何在 Ubuntu VPS 上备份 PostgreSQL 数据库

    什么是 PostgreSQL PostgreSQL 是一个现代数据库管理系统 它经常用于存储和操作与网站和应用程序相关的信息 与任何类型的有价值的数据一样 实施备份方案以防止数据丢失非常重要 本指南将介绍一些备份 PostgreSQL 数据
  • 如何在 React 中构建自动完成组件

    介绍 自动完成是一种输入字段根据用户输入建议单词的功能 这有助于改善应用程序中的用户体验 例如需要搜索的情况 在本文中 您将研究如何在 React 中构建自动完成组件 您将使用固定的建议列表 事件绑定 理解键盘代码以及操作状态管理 先决条件
  • 如何使用 Nmap 扫描开放端口

    介绍 对于许多崭露头角的系统管理员来说 网络是一个广泛且令人难以承受的主题 有各种层 协议和接口 以及许多必须掌握才能理解它们的工具和实用程序 在 TCP IP 和 UDP 网络中 ports是逻辑通信的端点 单个 IP 地址可能运行许多服