《Kali渗透基础》04. 主动信息收集(一)
@
本系列侧重方法论,各工具只是实现目标的载体。
命令与工具只做简单介绍,其使用另见《安全工具录》。
本文以 kali-linux-2022.3-vmware-amd64 为例。
1:主动信息收集
被动信息收集面临信息过时与不全面的问题。需要主动信息收集来进行确认与扩充。
但是,对于主动收集的信息,也要保持怀疑的态度。
主动信息收集:
扫描(扫 IP、端口、服务等):
发送不同的探测,根据返回结果判断目标状态。
- 直接与目标系统交互通信。
- 无法避免留下访问的痕迹。
- 使用受控的第三方电脑进行探测
- 使用代理
- 使用噪声迷惑目标,淹没真实的探测流量
- 做好被封杀的准备。
2:发现
发现指识别存活的主机。任何存活主机都是潜在的攻击目标。通常输出一个 IP 地址列表。
发现与端口扫描知识点有交叉,但理论上不一样。
可大致根据网络分层结构分为二层、三层、四层发现。

3:二层发现
二层发现:主要通过 ARP 协议,发现同网段下存活的主机。
优点:
- 扫描速度快。
- 可靠。
缺点:
- 不可路由,只能发现本网段主机。
常用于获得某台主机控制权后,以此作为跳板发现其网段内其他主机。
3.1:arping
ARPing(Address Resolution Protocol Pinging)用于获取与指定 IP 地址相关联的 MAC 地址。
基本语法:
arping 选项
部分选项:
| 参数 | 说明 |
|---|---|
-c count |
Only send count requests. |
-d |
Find duplicate replies. Exit with 1 if there are answers from two different MAC addresses. |
示例01:
arping 192.168.230.1 -c 1
示例02:查看是否有 ARP 欺骗。
arping 192.168.230.1 -d
示例03:若主机存活只显示其 ip。
arping 192.168.230.1 -c 1 | grep "bytes from" | cut -d" " -f 5 | cut -d "(" -f 2 | cut -d")" -f 1
由于一次只能探测一条,需要搭配脚本使用。
3.2:nmap
Nmap(Network Mapper)用于探测主机、端口和服务等信息。提供了丰富的功能和灵活性。
基本语法:
nmap 选项
部分选项:
| 参数 | 说明 |
|---|---|
-sn |
Ping Scan - disable port scan. |
-iL <inputfilename> |
Input from list of hosts/networks. |
示例01:扫描网段所有存活主机。
nmap 10.133.30.1-254 -sn
示例02:扫描文件中的主机是否存活
nmap -iL iplist.txt -sn
3.3:netdiscover
Netdiscover 是一个基于 ARP 协议的网络扫描工具,用于发现本地网络中活动主机的 IP 地址和 MAC 地址。
Active/passive ARP reconnaissance tool.
特点:
- 专用于二层发现
- 可用于无线和交换网络环境
- 主动和被动探测
基本语法:
netdiscover 选项
部分选项:
| 参数 | 说明 |
|---|---|
-i device |
your network device. |
-l file |
scan the list of ranges contained into the given file. |
-p |
do not send anything, only sniff.(passive mode) |
示例01:指定网络接口,扫描网段存活主机。
netdiscover -i eth0 -r 1.1.1.0/24
示例02:指定文件中读取 ip。
netdiscover -l iplist.txt
示例03:指定网络接口,被动侦查。
netdiscover -i eth1 -p
3.4:Scapy
Scapy 是一个 Python 网络数据包处理库,它可以用于构建、发送和解析网络数据包。它提供了一个灵活的接口,可以用于网络协议的开发、网络流量分析、网络扫描和攻击等任务。
特点:
- 作为 Python 库进行调用
- 也可作为单独的工具使用
- 分析、创建、修改、注入网络流量
命令行输入 scapy 进入。

示例01:一个简单二层发现脚本 arp_disc.py。
#!/usr/bin/python
import logging
import subprocess
import sys
from scapy.all import *
from scapy.layers.l2 import ARP
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
if len(sys.argv) != 2:
print("Usage: ./arp_disc.py <interface>")
print("Example: ./arp_disc.py eth0")
sys.exit()
interface = str(sys.argv[1])
ip = subprocess.check_output("ifconfig " + interface + " | grep 'inet ' | cut -d 't' -f 2 | cut -d ' ' -f 2", shell=True).strip().decode()
print("IP address:", ip)
prefix = ip.split('.')[0] + '.' + ip.split('.')[1] + '.' + ip.split('.')[2] + '.'
for addr in range(0, 254):
answer = sr1(ARP(pdst=prefix + str(addr)), timeout=0.1, verbose=0)
if answer == None:
pass
else:
print(prefix + str(addr))
print("END")
sys.exit()
4:三层发现
三层发现:主要通过 ip、icmp 协议发现存活主机。
优点:
- 可路由
- 速度比较快
缺点:
- 速度比二层慢
- 经常被边界防火墙过滤
4.1:ping
Ping 是一种计算机网络工具,用于测试主机之间的连通性和测量往返时间(RTT)。使用 ICMP 协议(控制消息协议)。
基本语法:
ping 选项
部分选项:
| 参数 | 说明 |
|---|---|
<destination> |
dns name or ip address. |
-c <count> |
stop after count replies. |
示例:如果主机 ping 得通,只显示其 ip 地址。
ping 1.1.1.1 -c 1 | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1
ping 对于大量探测需要靠脚本实现。
4.2:Scapy
命令行输入 scapy 进入或作为 python 模块使用。
示例01:pinger.py。
#!/usr/bin/python
import logging
import subprocess
import sys
from scapy.all import *
from scapy.layers.inet import IP, ICMP
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
if len(sys.argv) != 2:
print("Usage: ./pinger.py </24 network address>")
print("Example: ./pinger.py 172.16.36.0")
sys.exit()
address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'
for addr in range(0, 254):
answer = sr1(IP(dst=prefix + str(addr))/ICMP(), timeout=0.1, verbose=0)
if answer == None:
pass
else:
print(prefix + str(addr))
print("END")
sys.exit()
4.3:nmap
基本语法:
nmap 选项
部分选项:
| 参数 | 说明 |
|---|---|
-sn |
Ping Scan - disable port scan. |
示例:
nmap -sn 1.1.1.100-250
4.4:fping
fping(Fast Ping)用于测试主机的可达性和响应时间。与标准 ping 工具不同,fping 具有一些额外的功能和选项。支持并发探测与批量操作。
基本语法:
fping 选项
部分选项:
| 参数 | 说明 |
|---|---|
-g 或 --generate |
generate target list (only if no -f specified). (give start and end IP in the target list, or a CIDR address) |
-c 或 --count=N |
count mode: send N pings to each target. |
-f 或 --file=FILE |
read list of targets from a file. |
示例01:
fping 1.1.1.1 -c 2
示例02:
fping -g 1.1.1.50 1.1.1.100
示例03:
fping -g 1.1.1.0/24
4.5:hping3
hping3 是一种网络扫描和测试工具,可以创建和发送自定义的 TCP/IP 数据包,并监视目标主机的响应。
- 能够发送几乎任意 TCP / IP 包。
- 功能强大但每次只能扫描一个目标。
基本语法:
hping3 选项
部分选项:
| 参数 | 说明 |
|---|---|
-c 或 --count |
packet count. |
-1 或 --icmp |
ICMP mode. |
示例01:
hping3 1.1.1.1 --icmp -c 2
示例02:一个简单的脚本。
for addr in $(seq 1 254); do hping3 1.1.1.$addr --icmp -c 1 >> handle.txt & done
4.6:traceroute
traceroute 命令用于跟踪数据包在互联网中的路径。
基本语法:
traceroute 选项
示例:
traceroute 1.1.1.1
5:四层发现
四层发现:主要基于 TCP、UDP 协议来发现存活主机。
优点:
- 可路由且结果可靠
- 不太可能被防火墙过滤
- 甚至可以发现所有端口都被过滤的主机
缺点:
- 基于状态过滤的防火墙可能过滤扫描
- 全端口扫描速度慢
原理:
TCP
全连接扫描(TCP Connect Scan)
扫描器尝试与目标主机的端口建立完整的TCP连接。如果连接成功建立,则说明该端口是开放的,目标主机存活。半开放扫描(SYN 扫描,TCP SYN Scan)
扫描器发送一个 TCP SYN 包(同步包)到目标主机的指定端口,如果收到目标主机的 TCP SYN/ACK 包(同步/应答包),则表示该端口是开放的(主机存活);如果收到目标主机的 RST 包(复位包)或没有收到任何响应,则表示该端口是关闭的。ACK 扫描
发送未经请求的ACK包到目标主机的端口,通过观察返回的响应或未响应来判断端口的状态。大多数操作系统对于未经请求的 ACK 包会返回一个 RST 包。在很多情况下可能被防火墙或入侵检测系统所阻止。
UDP
- 扫描器向目标主机的指定端口发送一个UDP数据包,然后根据接收到的响应进行判断。(例如,ICMP端口不可达消息)
5.1:Scapy
命令行输入 scapy 进入或作为 python 模块使用。
示例01:基于 TCP 的脚本 ACK_ping.py。
#!/usr/bin/python
import logging
import sys
from scapy.all import *
from scapy.layers.inet import IP, TCP
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
if len(sys.argv) != 2:
print("Usage: ./ACK_ping.py </24 network address>")
print("Example: ./ACK_ping.py 172.16.36.0")
sys.exit()
address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'
for addr in range(0, 254):
response = sr1(IP(dst=prefix + str(addr))/TCP(dport=2222, flags='A'), timeout=0.1, verbose=0)
try:
if int(response[TCP].flags) == 4:
print(prefix + str(addr))
except:
pass
print("END")
sys.exit()
示例02:基于 UDP 的脚本 UDP_ping.py。
#!/usr/bin/python
import logging
import sys
from scapy.all import *
from scapy.layers.inet import IP, UDP
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
if len(sys.argv) != 2:
print("Usage: ./UDP_ping.py </24 network address>")
print("Example: ./UDP_ping.py 172.16.36.0")
sys.exit()
address = str(sys.argv[1])
prefix = address.split('.')[0] + '.' + address.split('.')[1] + '.' + address.split('.')[2] + '.'
for addr in range(0, 254):
response = sr1(IP(dst=prefix + str(addr))/UDP(dport=2222), timeout=0.1, verbose=0)
try:
if int(response[IP].proto) == 1:
print(prefix + str(addr))
except:
pass
print("END")
sys.exit()
5.2:nmap
基本语法:
nmap 选项
部分选项:
| 参数 | 说明 |
|---|---|
-sn |
Ping Scan - disable port scan. |
-PS/PA/PU/PY[portlist] |
TCP SYN/ACK, UDP or SCTP discovery to given ports. |
示例01:
nmap 1.1.1.100-254 -PU 53 -sn
示例02:
nmap 192.168.230.1-200 -PA 80 -sn
5.3:hping3
基本语法:
hping3 选项
部分选项:
| 参数 | 说明 |
|---|---|
-2 或 --udp |
UDP mode. |
示例01:UDP 模式发现。
hping3 --udp 1.1.1.1 -c 1
示例02:简单一句话脚本。
for addr in $(seq 1 254); do hping3 --udp 1.1.1.$addr -c 1 >> t.txt; done
运行完后查看文件即可
grep Unreachable t.txt | cut -d " " -f 5 | cut -d "=" -f 2
示例03:TCP 模式发现。
hping3 1.1.1.1 -c 1
却下水晶帘,玲珑望秋月。
——《玉阶怨》(唐)李白
《Kali渗透基础》04. 主动信息收集(一)的更多相关文章
- 小白日记7:kali渗透测试之主动信息收集-发现(一)--二层发现:arping/shell脚本,Netdiscover,scapy
主动信息收集 被动信息收集可能不准确,可以用主动信息收集验证 特点:直接与目标系统交互通信,无法避免留下访问痕迹 解决方法:1.使用受控的第三方电脑进行探测,使用代理 (做好被封杀的准备) 2 ...
- kali linux之主动信息收集(二层发现)
主动信息收集: 直接与目标系统交互信息,无法避免留下访问的痕迹 使用受控的第三方电脑进行探测,如(使用代理或者使用肉鸡,做好被封杀的准备,使用噪声迷惑目标,淹没真实的探测流量) 识别活着的主机,会有潜 ...
- 小白日记8:kali渗透测试之主动信息收集(二)三层发现:ping、traceroute、scapy、nmap、fping、Hping
三层发现 三层协议有:IP以及ICMP协议(internet管理协议).icmp的作用是用来实现intenet管理的,进行路径的发现,网路通信情况,或者目标主机的状态:在三层发现中主要使用icmp协议 ...
- 小白日记9:kali渗透测试之主动信息收集(二)四层发现:TCP、UDP、nmap、hping、scapy
四层发现 四层发现的目的是扫描出可能存活的IP地址,四层发现虽然涉及端口扫描,但是并不对端口的状态进行精确判断,其本质是利用四层协议的一些通信来识别主机ip是否存在. 四层发现的优点: 1.可路由且结 ...
- kali linux之主动信息收集(三层发现,四层发现)
三层发现: 比二层发现的优点即可路由,就是速度比二层慢,相对我们来说还是算快的,经常被边界防火墙过滤 ip icmp协议 OSI七层模型
- kali渗透-基础篇
渗透之meterpreter 模拟场景:小明是我室友,整天游戏人生,浑浑噩噩,前途迷茫,每次上课交作业都要看我的,于是我开启了apche服务器,给他下载作业(别问我为什么不用QQ传,因为要装逼!),他 ...
- 网络安全-主动信息收集篇第二章SNMP扫描
SNMP扫描: snmp在中大型企业中可以用来做网络管理和网络监控的使用,当开启了snmp简单网络管理后,那么客户机就可以通过这个协议向该设备发送snmp协议内容可以轻松查询到目标主机的相关信息. 以 ...
- 网络安全-主动信息收集篇第二章-三层网络发现之ping
第三层网络扫描基于TCP/IP.ICMP协议. 优点:可路由.速度比较快 缺点:相对于二层网络扫描较慢,容易被边界防火墙过滤 所有扫描发现技术,都会有相应的对抗办法,所以无论是来自二层的网络扫描还是来 ...
- 网络安全-主动信息收集篇第二章-二层网络扫描之Netdiscover
专用于二层发现 可用于无限和交换网络环境 主动和被动探测 主动模式:netdiscover –i 网卡名 –r IP/网络位 / netdiscover –l IPList.txt 被动 net ...
- 网络安全-主动信息收集篇第二章-二层网络扫描之nmap
nmap是网络层.传输层最重要的扫描工具之一,可以结合脚本对应用层的扫描和对网络弱点发现. 网络层发现nmap使用: Usage: nmap [Scan Type(s)] [Options] {tar ...
随机推荐
- liunx操作系统下配置服务器
centos7 下配置服务器基本步骤 1,yum install 服务器名称 2,关闭防火墙,配置服务器配置文件,开启服务, 3,创建文件,设置访问权限, 4,本地登陆,测试服务器能否连通
- 基于Jmeter+ant+Jenkins+钉钉机器人群通知的接口自动化测试
前言 搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境至少是JDK8及以上版本,最好是JAVA11或者JAVA17等较高的java环境,像jen ...
- 如何使用Go中的Weighted实现资源管理
1. 简介 本文将介绍 Go 语言中的 Weighted 并发原语,包括 Weighted 的基本使用方法.实现原理.使用注意事项等内容.能够更好地理解和应用 Weighted 来实现资源的管理,从而 ...
- WPF 入门笔记 - 03 - 样式基础及控件模板
原学习路线是按照圣殿骑士的<WPF基础到企业应用系列>的路线走的,但是布局之后直接依赖属性学起来有些僵硬,不太好理解,尝试了文章的前部分内容后放弃,调整为本篇博文内容.笔记路线将按照痕迹g ...
- k8s实战案例之部署redis单机和redis cluster
1.在k8s上部署redis单机 1.1.redis简介 redis是一款基于BSD协议,开源的非关系型数据库(nosql数据库),作者是意大利开发者Salvatore Sanfilippo在2009 ...
- 解决NAT模式下SSH连接虚拟机
解决NAT模式下SSH连接虚拟机 简介: 用到的有软件:VirtualBox6.1,RetHat7.4 , SmartTTY 来由: 刚开始使用桥接模式(Bridged)网络连接,但是虚拟机没有网络. ...
- CSS3实现嵌套立方体旋转的3D效果
刚发现一个网站上面的3D立方体效果挺好看的,就模仿着用CSS3实现了一个类似的效果:http://39.105.101.122/myhtml/CSS/transform_3D/cube_3D.html ...
- 前端学习C语言 - 函数和关键字
函数和关键字 本篇主要介绍:自定义函数.宏函数.字符串处理函数和关键字. 自定义函数 基本用法 实现一个 add() 函数.请看示例: #include <stdio.h> // 自定义函 ...
- Health Kit 新版本功能解析,给你丰富运动体验!
华为运动健康服务(HUAWEI Health Kit)6.11.0版本新鲜出炉! 开放活力三环数据助力养成运动习惯,新增水肺潜水.户外探险数据开放-- 丰富运动体验,尽在Health Kit,一起来看 ...
- 2023-07-02:给定一个1~N的排列,每次将相邻两数相加,可以得到新的序列,长度是N-1 再对新的序列,每次将相邻两数相加,可以得到新的序列,长度是N-2 这样下去可以最终只剩一个数字 比如 :
2023-07-02:给定一个1~N的排列,每次将相邻两数相加,可以得到新的序列,长度是N-1 再对新的序列,每次将相邻两数相加,可以得到新的序列,长度是N-2 这样下去可以最终只剩一个数字 比如 : ...