渗透测试:主机发现和端口扫描的思路方法总结(nmap+ping命令+nc.traditional+伪设备连接)

本文介绍了四种进行主机发现和端口扫描的方法,包括使用nmap工具进行详细扫描,利用ping命令进行主机探测,通过nc.traditional实现端口扫描,以及使用bash中的伪设备/dev/tcp进行端口测试。文章强调了在渗透测试中信息收集的重要性,并提供了编写bash脚本的示例,帮助读者理解不同扫描技术的使用场景和技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 写在开头 

 方法一:nmap扫描 

 方法二:非nmap环境的主机发现——ping命令

 方法三:netcat实现端口扫描

 方法四:伪设备实现端口扫描

 总结与思考 

写在开头 

信息搜集是渗透测试的第一步,而主机发现和端口扫描则是信息搜集的关键步骤。后续的渗透测试都是基于开始搜集侦察的信息。这一步一定要保证把信息搜集完整齐全,否则一旦后续渗透过程出现了思路不畅,就会返工完全重做,非常浪费时间哪怕是扫描不到有效的信息,也要及时记录,至少证明此处我已经扫描过了,不需要重复返工。同时在大型的渗透测试项目时,可能是整个团队在进行渗透,及时记录更有助于团队成员的信息共享。而在进行常规打靶时的主机发现于端口扫描是有一些套路的,这里做一个简要的总结。

 本文涉及nmap、ping命令、nc.traditional、伪设备连接四种方法进行主机发现/端口扫描,还涉及到许多bash脚本的编写。本篇博客是我看了红队笔记大佬的视频后总结实践归纳的笔记,其原视频见:

「红队笔记」主机发现和端口扫描的基本原理和工具选择_哔哩哔哩_bilibili

另外本人技术有限,如果博客中有错误或读者有其他简要,欢迎指正。

方法一:nmap扫描 

 nmap是进行主机发现和端口扫描最为常见的工具,其中自带的一些脚本也可以帮助我们干很多事情 ,包括漏洞扫描等等。nmap在kali中是自带的,使用起来非常方便。但由于nmap这个工具过于出名,其流量特征早已被分析透彻,因此使用nmap进行扫描是很容易暴露痕迹的,容易被蓝队发现。在常规的打靶自学中,nmap还是非常常规的工具,我们应该熟悉其常规的参数和原理。nmap的参数使用帮助可使用nmap --help查看:

nmap --help

 其中的参数有很多,我这里截图只有其中一部分。--help的帮助信息是非常关键的,细小的参数差异可能实现很多不同的功能。使用nmap扫描需要sudo,本篇博客就用root进行演示,省略sudo了,大家切勿效仿。莫慌,常见的参数只有几个,且听我慢慢道来。

1.主机发现:对整个网段进行扫描。如果靶机和攻击机在同一个网段,我们可以扫描自己的网段确定靶机的ip,命令如下:

nmap -sn 192.168.200.0/24

 -sn是使用ping扫描的参数,早期的nmap版本使用-sP封装了ping,现已弃用。后接待扫描的网段,这里我攻击机和靶机都在同一网段,可使用ip a命令查看自己的网段。

 可发现靶机的ip是192.168.200.144。网段中有很多主机,如何判断靶机一定是144呢?其实这源于对网段的熟悉,1,2,254这些ip都是对应一些网关,131是我kali攻击机的ip,因此可以确定144是靶机ip。在实际的渗透中,要想保证扫描准确,可以在靶机上线前后各进行一次扫描,对比上线的ip即可确定靶机的ip

2.全端口扫描:确定靶机ip后,扫描靶机ip的全端口(1-65535),探测开放的端口,命令如下:

nmap --min-rate 10000 -p- 192.168.200.144

 这里--min-rate 10000的意思是让nmap以不小于每秒10000次的速率进行扫描。10000这个数字是权衡的结果,数字过大,则扫描速度过快,有可能会有端口遗漏;数字过小,则扫描速度过慢,浪费时间。实际情况中建议扫描两次,保证没有端口遗漏。-p是要扫描的端口,-p-则表示进行全端口扫描(1-65535)。如上图,本次扫描出了许多tcp端口。

3.UDP扫描:查看有没有开放的UDP端口,UDP端口暴露的攻击面虽然较小,但我们也不要遗漏信息。

nmap -sU --min-rate 10000 -p- 192.168.200.144

如上图,开放的udp端口有111,5353,32768 

4.服务版本探测:这一步通常基于第二步开放端口的探测结果,进一步扫描每个端口对应的服务版本和操作系统,得到更具体的信息。命令如下:

nmap -sT -sV -O -p22,25,80,110,111,139,143,445,901,3306 192.168.200.144

参数中-sT表示进行TCP扫描,-sV扫描服务版本,-O扫描操作系统,-p后面接第二步确定的开放端口,表示探测这些端口的服务版本。

 5.漏洞脚本扫描:nmap中自带了一些内置脚本,其中就用漏洞脚本vuln,vuln是vulnerbility漏洞脆弱点的简写,命令如下:

nmap --script=vuln -p22,25,80,110,111,139,143,445,901,3306 192.168.200.144

--script=vuln表示使用自带的漏洞扫描脚本进行扫描,-p后接开放的端口,表示探测这些端口的漏洞。这一步扫描的时间较长,可能需要几分钟时间。nmap的漏洞扫描结果可以给我们一个渗透测试的大致思路,即哪里的漏洞较多,我们可以从哪个端口入手进行渗透。

 我的这个靶机漏洞比较多,主要发生在80端口,其中的漏洞涉及Dos,sql注入,csrf,敏感信息等。通常情况nmap的漏洞扫描不会有太多结果,仅仅是一个辅助

方法二:非nmap环境的主机发现——ping命令

 实际情况中,可能我们无法使用nmap进行主机发现(不想暴露流量特征/nmap被ban/环境中没有nmap且无法联网等情况) ,此时可以使用ping命令进行扫描。有关ping命令的参数帮助可用ping --help查看

 参数有很多,最常见的是-c表示收到多少个应答后停止,-W设置超时时间等。如果不指定参数,window会默认发送4个icmp报文,而linux则会一直发送icmp报文,直到我们手动ctrl+c停止。对192.168.200.144进行ping探测,收到两个响应后停止,设置操作时间为1s,如下图,没有丢包。

ping -c 2 -W 1 192.168.200.144

有了这个基础,我们就可以用写一个bash脚本,对网段中的一些的ip进行遍历,并依次ping每个ip,查看回显,从而进行主机探测。我们这里写一个脚本,对192.168.200.141~192.168.200.145范围内的ip进行ping扫描,设置对每个ip收到1个响应即停止,超时时间为0.1秒,bash脚本如下:

for i in {141..145}; do ping 192.168.200.$i -c 1 -W 0.1; done

 可以很明显的看到只有144这个ip有回显,显示64 bytes from 192.168.200.144,其他ip都没有反应,因此在141-145的范围内,存活的ip是144。如果主机存活(ping成功看到回显),回显中会有'from'字符,我们把from作为grep过滤的关键词,就可以更方便的看到ping成功的ip,bash脚本如下,此处对192.168.200.0/24整个网段进行ping探测:

for i in {1..254}; do ping -c 1 -W 0.1 192.168.200.$i|grep from;done

 可以很方便的看到这个网段范围内存活的一些主机

 方法三:netcat实现端口扫描

 利用nc进行端口扫描,不过要实现端口扫描用的是旧版的nc,而kali中默认安装的新版的nc,因此要使用nc.traditional,可以先用nc.traditional -h查看参数帮助:

 比如以扫描20-120的端口开放情况为例,命令如下:

nc.traditional -vv -z 192.168.200.144 20-120

  • -vv: 这是命令的选项之一,表示进行详细的输出(verbose)。通过使用该选项,命令将提供更多关于扫描进程的信息。

  • -z: 这也是命令的选项之一,表示进行端口扫描。它会尝试建立到指定IP地址和端口的连接,但不发送任何实际的数据。

结果包含了20-120每个端口的开放情况,少部分是open,大部分是Connection redused。我们可以使用字符串open过滤,但发现单纯的使用|grep open无法实现过滤,这是显示标准错误和标准输出类型不统一的问题,我们需要加上2>&1实现类型的统一才可

如果不添加2>&1,标准错误(stderr)的输出将不会被重定向到标准输出(stdout),而是直接显示在终端上。这意味着通过管道操作符|将无法捕获和处理错误输出。

在端口扫描过程中,如果存在连接错误或其他错误消息,它们将显示在终端上,而不会通过管道传递给下一个命令(grep)进行过滤和处理。这样就无法对错误消息进行筛选,只能看到所有的输出信息,包括成功连接的端口和连接错误的端口。

因此,如果不添加2>&1,就无法将错误消息与正常输出一起处理,可能会导致输出信息的混乱,并且无法方便地区分哪些端口连接成功,哪些连接失败。添加2>&1可以将错误消息与正常输出合并,使得可以对整个输出进行统一的处理。完整命令如下:

nc.traditional -vv -z 192.168.200.144 20-120 2>&1| grep open 

 当然,我们也可以反向过滤,过滤出不含refused的内容,添加命令|grep -v refused即可。-v选项表示显示不匹配模式的行。命令如下:

nc.traditional -vv -z 192.168.200.144 20-120 2>&1| grep -v refused

 方法四:伪设备实现端口扫描

 伪设备,即/dev/tcp/ ,此处需要bash环境,而kali中的默认shell环境是zsh,可以用如下命令看到:

 我们需要输入bash字符调整为bash的shell环境,若对20~120号端口进行扫描,bash脚本如下:

for i in {20..120}; do (echo < /dev/tcp/192.168.200.144/$i) &>/dev/null && printf "\n[+] The open port is : %d\n" "$i" || printf ".";done

这个脚本的作用是遍历指定的端口范围,尝试与目标IP地址的每个端口建立TCP连接。如果连接成功,则显示一个带有开放端口号的消息,如果连接失败,则显示一个点号.表示关闭端口,同时表示程序正在运行。这样可以快速扫描目标主机的端口,识别哪些端口是开放的。

for循环会依次遍历端口号,循环体中使用/dev/tcp特殊文件(伪设备)来进行基于TCP的端口连接测试。192.168.200.144是要扫描的目标IP地址,$i表示当前循环的端口号。

  • (echo < /dev/tcp/192.168.200.144/$i) &>/dev/null:这一部分尝试与指定的IP地址和端口建立TCP连接。echo命令通过输入重定向将内容发送到特殊文件/dev/tcp/IP/PORT,这会尝试与给定的IP地址和端口进行连接。&>/dev/null将连接过程中的任何输出(包括标准输出和标准错误)都重定向到/dev/null,意味着将其丢弃而不显示。

  • && printf "\n[+] The open port is : %d\n" "$i":如果连接成功,即端口开放,就会执行这个语句,即逻辑与仅当&&之前的命令成功执行才会继续执行&&后面的命令,使用printf命令打印出一个带有开放端口号的消息。

  • || printf ".":如果连接失败,即端口关闭,就会执行这个语句。它使用printf命令打印一个点号作为标记表示端口关闭。同时不断的输出.也会表示程序正在运行,让我们方便确定程序一直在运行,而没有卡死。(如果遍历1-65535,时间会很长,通常情况大部分端口都是关闭的,如果没有输出,我们难以判断是不是脚本卡死了)

 这里插叙一下,如果遍历所有端口1-65535,时间会很长,通常情况大部分端口都是关闭的,会输出很多点. 如果我们想终止程序,需要用ctrl + z,然后再kill -9 %1终止上一条命令

总结与思考 

 本文总结了有关主机发现和端口扫描的常规方法思路。包括使用nmap工具和使用ping命令进行主机发现、使用nc.traditional进行端口扫描、使用伪设备进行端口扫描。本文涉及了许多bash脚本的for循环命令、有关输出重定向>&符号的使用、逻辑运算符&&和||的使用等,希望读者慢慢消化。

 在进行常规的打靶训练时,nmap工具足够强大,也很方便。但我们不能单纯依赖工具,还是要会自己编写脚本,以适应更多nmap不方便使用的情况。

总结完毕,如果读者觉得有用,恳请多多点赞收藏关注。有关问题也可以在评论区提出,我一定知无不言。后续我还会继续学习渗透测试相关的知识,并写博客进行总结。希望读者多多支持。

<think>好的,用户的问题是排查Kali Linux中进行端口扫描时未发现80端口的原因。我需要根据提供的引用内容,结合自己的知识来回答。 首先,用户提到在Kali中使用端口扫描但未检测到80端口。可能的原因有很多,需要逐一分析。根据引用内容,引用了四种不同的扫描方法工具,比如TCP ACK扫描、masscan、ncNmap。此外,还有关于防火墙干扰Scapy的注意事项。 第一步,防火墙或过滤设备的问题。引用[1]提到TCP ACK扫描用于检测防火墙是否屏蔽端口。如果目标有防火墙,可能丢弃或拒绝ACK包,导致扫描结果不准确。这时候应该检查目标主机的防火墙设置,或者尝试其他扫描方式,如SYN扫描,可能绕过某些规则。 第二步,端口状态本身。用户需要确认目标主机的80端口是否真的开放。可以使用其他工具如curl或telnet来测试。例如,curl http://目标IP:80,如果无法连接,可能端口未开放或服务未运行。 第三步,扫描参数是否正确。引用[2]中的masscannc命令示例显示,需要正确指定端口范围。如果用户扫描时没有明确包含80端口,就会漏掉。比如使用masscan时是否指定了-p80参数,或者Nmap是否扫描了正确端口。 第四步,权限问题。SYN扫描需要root权限,因为需要构造原始数据包。引用[3]提到Scapy进行SYN扫描可能被内核中断,可能需要使用sudo或以root用户运行命令。例如,使用Nmap的SYN扫描(-sS)需要管理员权限,否则会失败。 第五步,网络连通性问题。用户需要确认是否能与目标主机通信,使用ping或traceroute检查网络连接是否正常。如果存在网络问题,扫描工具自然无法检测到端口。 第六步,服务配置问题。目标主机的80端口可能被绑定到特定接口或限制访问。例如,Web服务器可能只监听本地回环地址,或者配置了IP白名单,导致外部扫描不到。 第七步,扫描工具版本或配置。某些工具可能需要更新,或者配置文件有误。例如,Nmap的脚本或参数设置可能影响结果,确保使用最新版本,并检查是否有误配置。 接下来,解决方法部分需要对应上述原因。例如,检查防火墙设置,使用不同扫描方法,验证端口状态,提升权限,检查网络连接等。同时,可以结合引用中的工具示例,比如使用masscan指定端口,或Nmap的-sV参数检测服务版本。 最后,相关问题部分需要考虑用户可能进一步的问题,比如如何验证端口状态,绕过防火墙的方法,以及Nmap的高级参数使用。这些扩展问题能帮助用户更深入地了解端口扫描技术。 需要确保回答结构清晰,步骤详细,并且引用正确的文献来源。同时避免使用Markdown格式,保持自然的中文表达。</think>在Kali Linux中进行端口扫描未检测到80端口,可能涉及以下原因及解决方法: ### 一、可能原因分析 1. **防火墙/过滤设备干扰** - 目标主机可能配置了防火墙丢弃ACK包,导致基于ACK扫描(如`masscan`)无法识别真实状态[^1] - 网络中间设备可能拦截了扫描流量,例如企业级防火墙可能阻断未授权的SYN请求[^3] 2. **端口实际状态** - 目标主机的80端口确实未开放,或Web服务未运行 - 服务绑定在非标准端口(如8080)而非80端口 3. **扫描参数错误** - 未正确指定端口范围(如使用`masscan -p1-65535`时遗漏80端口)[^2] - 扫描工具未添加`-p80`参数,例如`nmap 目标IP`默认仅扫描1000个常用端口 4. **权限不足** - SYN扫描(半开扫描)需要root权限执行,普通用户运行会失败 - 部分工具如`nc.traditional`需要`sudo`才能构造原始数据包[^2] 5. **网络连通性问题** - 本机与目标主机之间存在路由故障 - 目标主机禁用了ICMP响应,导致扫描器误判主机离线 ### 二、解决方法步骤 1. **验证基础连通性** ```bash ping 目标IP && curl -Iv http://目标IP:80 ``` - 若`ping`不通需检查网络配置 - 若`curl`返回超时但能ping通则重点排查端口状态 2. **多工具交叉验证** - **使用Nmap全参数扫描** ```bash sudo nmap -sS -sV -p80 目标IP -Pn -T4 ``` `-sS`进行SYN扫描,`-Pn`跳过主机发现,`-sV`探测服务版本[^4] - **Masscan快速扫描** ```bash sudo masscan -p80 目标IP --rate=1000 ``` 通过高速扫描规避简单防火墙[^2] 3. **权限与环境检查** - 所有扫描命令前添加`sudo` - 确认kali虚拟机网卡模式为桥接/NAT(非隔离模式)[^4] 4. **深度检测策略** - **ACK扫描检测防火墙规则** ```bash nmap -sA -p80 目标IP ``` 若返回`unfiltered`说明端口未被防火墙完全屏蔽 - **全连接扫描验证** ```bash nc.traditional -vnz 目标IP 80 ``` 观察是否返回`Connected` ### 三、特殊场景处理 - **若目标使用端口敲门(Port Knocking)** 需先按特定顺序访问多个端口才能解锁80端口 - **若存在负载均衡** 尝试不同扫描频率,观察响应IP是否变化 - **应对IDS/IPS系统** 使用`nmap -f`分片扫描或`--scan-delay 1s`降低检测概率
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Boss_frank

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值