📡二层发现(数据链路层)

🎈arping

用来向局域网内的其它主机发送 ARP 请求的指令,它可以用来测试局域网内的某个 IP 是否已被使用。 能够看到 MAC 地址,需要高权限用户执行,调用底层协议和对网接口进行配置和管理。

sudo arping [目标] [参数]
sudo arping 192.168.4.114 -c 3

💡参数释义

  • -A:与 -U 参数类似,但是使用的是 ARP REPLY 包而非 ARP REQUEST 包。 

  • -b:发送以太网广播帧,arping 在开始时使用广播地址,在收到回复后使用 unicast 单播地址。 

  • -c:发送指定的 count 个 ARP REQUEST 包后停止。如果指定了 -w 参数,则会等待相同数量的 ARP REPLY 包,直到超时为止。 (指定发多少个包)

  • -D:重复地址探测模式,用来检测有没有 IP 地址冲突,如果没有 IP 冲突则返回 0。 

  • -f:收到第一个响应包后退出。 

  • -h:显示帮助页。 

  • -I:用来发送 ARP REQUEST 包的网络设备的名称。

  • -q:quite 模式,不显示输出。 

  • -U:无理由的(强制的)ARP 模式去更新别的主机上的 ARP CACHE 列表中的本机的信息,不需要响应。 

  • -V:显示 arping 的版本号。 

  • -w:指定一个超时时间,单位为秒,arping 在到达指定时间后退出,无论期间发送或接收了多少包。在这种情况下,arping 在发送完指定的 count(-c)个包后并不会停止,而是等待到超时或发送的 count 个包都进行了回应后才会退出。 

  • -s:设置发送 ARP 包的 IP 资源地址,如果为空,则按如下方式处理:

🎈netdiscover

二层发现工具,拥有主动和被动发现两种方式。

sudo netdiscover [参数] -r [目标]
sudo netdiscover -i eth0 -r 192.168.4.0/24 -c 2

💡参数释义

  • -r 指定目标网段

  • -i 指定网卡

  • -p 被动模式。默默的侦听指定的网卡以发现别的二层主机

  • -t ARP 包发送间隔。单位毫秒。这个可以用来规避检测系统的告警。

  • -l file: 指定扫描范围列表文件

  • -p passive mode: 使用被动扫描的方式,不发送任何数据

  • -m file: 扫描已知 mac 地址和主机名的电脑列表

  • -F filter: 指定 pcap 筛选器表达式 (默认:「arp」)

  • -s time: 每个 arp 请求之间的睡眠时间 (毫秒)

  • -n node: 使用八字节的形式扫描 (2 - 253)

  • -c count: 发送 arp 请求的时间次数

  • -f: 使用主动模式的扫描

  • -d: 忽略配置文件

  • -S: 启用每个 arp 请求之间抑制的睡眠时间

  • -P: 打印结果

  • -N: 不打印头。只有启用 - p 时有效。

  • -L: 将捕获的信息输出 (-P),并继续进行扫描

🎈nbtscan

一个在本地或远程 TCP/IP 网络上扫描开放的 NETBIOS 名称服务器的命令行工具

范围可以表示成「192.168.12.0/24」或「192.168.12.64-97」

sudo nbtscan-unixwiz [参数] [目标]
sudo nbtscan -r 192.168.4.0/24

💡参数释义

  • -V 显示版本信息

  • -f 显示完整的 NBT 资源记录响应 (推荐)

  • -H 生成 HTTP 请求头

  • -v 开启详细输出调试

  • -n 不查找响应 IP 地址的反向名称

  • -p <n> 绑定 UDP 端口 (默认 0)

  • -m 响应中包含 MAC 地址 (等同 '-f')

  • -T <n> 超时不响应 (默认 2 秒)

  • -w <n> 次写入后等待秒数 (默认 10ms)

  • -t <n> 每个地址尝试次数 (默认 1 次)

  • -P 以 perl 的 hashref 格式生成结果

📞三层发现(网络层)

🎈ping

优点:系统自带,非常方便,一般也不会引起一些流量监测设备的报警

缺点:扫描速度慢,目标打开防火墙会导致结果不准确

ping [参数] [目标]

# 循环ping
for /l %i in (1, 1, 255) do @ping 192.168.100.%i -w 1 -n 1 | find /i "ttl"

for i in {1..254}; do ping -c 1 192.168.100.$i &>/dev/null && echo 192.168.100.$i is alive;done
for k in $(seq 1 255);do ping -c 1 192.168.100.$k|grep "ttl"|awk -F "[ :]+" '{print$4}'; done

💡参数释义

  • -t:Ping 目标设备,直到停止操作。

  • -a:将地址解析为主机名。

  • -n count:要发送的 ECHO 请求的数目,默认值为 4。

  • -l size:要发送的缓冲区大小(字节),默认值为 32。

  • -f:设置「不分段」标志,在数据包超出本地网络时,不允许 IP 分段。

  • -i TTL:生存时间,用于设定 ICMP 包的生存时间,默认值是 128。

  • -v TOS:服务类型,支持网络控制、低成本、高可靠性等。

  • -r count:跟踪的路由器数,指定追踪 ICMP 报文的最大跳数

🎈frping

fping 是一个向网络主机发送 ICMP 回显探测的程序,类似于 ping,但在 ping 多个主机时性能要好得多。fping 就是 ping 的加强版,可以对一个 IP 段 进行 ping 扫描

frping [选项] [目标...]
fping -ag 192.168.4.0/24
fping -ag 192.168.4.0/24 2>/dev/null

💡探测选项

  • -4, --ipv4 仅 ping IPv4 地址

  • -6, --ipv6 仅 ping IPv6 地址

  • -b, --size=BYTES 发送的 ping 数据包的大小。以字节为单位(默认值:56)

  • -B, --backoff=N 将指数退避因子设置为 N(默认值:1.5)

  • -c, --count=N 向每个目标发送 ping 的数量。(默认 1)

  • -f, --file=FILE 从文件中读取目标列表( - 表示标准输入)

  • -g, --generate 生成目标列表(仅当未指定 -f 时)

    • (在目标列表中给出开始和结束 IP,或 CIDR 地址)

    • (例如 fping -g 192.168.1.0 192.168.1.255 或 fping -g 192.168.1.0/24)

  • -H, --ttl=N 设置 IP 的 TTL 值(Time To Live hops)

  • -I, --iface=IFACE 指定网卡接口,就是从那个网卡接口发送 ping

  • -l, --loop 循环模式:永远发送 ping

  • -m, --all 使用所提供 hostnames 的所有 IP(例如 IPv4 和 IPv6),与 -A 一起使用

    • 即 ping 目标主机的多个网口

  • -M, --dontfrag 设置不分片标志

  • -O, --tos=N 在 ICMP 数据包上设置服务类型 (tos) 标志

  • -p, --period=Ping 对同一个目标的 ping 包间隔 (毫秒)

    • (在循环和统计模式中,默认为 1000)

  • -r, --retry=N 当 ping 失败时,最大重试次数 (默认为 3 次)

  • -R, --random 随机数据包数据(用于阻止链接数据压缩)

  • -S, --src=IP 设置源 IP 地址

  • -t, --timeout=MSEC 单个目标的超时时间 (毫秒)

    • (默认值:500 毫秒,除了 -l/-c/-C,它的 -p 周期最长为 2000 毫秒)

💡输出选项

  • -a, --alive 显示活动的目标。即可 ping 通的目标

  • -A, --addr 按 IP 地址显示目标

  • -C,--vcount=N 同 -c,以详细格式报告结果

  • -d, --rdns 按名称显示目标(强制反向 DNS 查找)

  • -D, --timestamp 在每个输出行之前打印时间戳

  • -e, --elapsed 显示返回数据包经过的时间

  • -i, --interval=MSEC ping 数据包之间的 MSEC 间隔(默认值:10 毫秒)

  • -n, --name 按名称显示目标(目标 IP 的反向 DNS 查找)

  • -N, --netdata 兼容 netdata 的输出(需要 -l -Q)

  • -o, --outage 显示累计中断时间(丢包 * 包间隔)

  • -q, --quiet 安静模式 (不显示每个目标或每个 ping 的结果)

  • -Q, --squiet=SECS 同 -q, 但是,每 n 秒显示信息概要

  • -s, --stats 打印最终统计数据

  • -u, --unreach 显示不可到达的目标

  • -v, --version 显示版本

  • -x, --reachable=N 显示 >=N 主机是否可达

🎈hping3

通常被用在 web 服务,用来做压力测试使用,进行 DOS 攻击实验。hping3 缺点是每次只能扫描一次目标。虽然 hping 以前主要用作安全工具,但它可以在许多方面被不太关心安全性的人员用于测试网络和主机,您可以使用 hping 的一小部分内容

hping3 [目标] [参数]

# 示例
UDP dos攻击:
sudo hping3 -c 10000 -d 120 --udp -w 64 -p 80 --flood --rand-source 192.168.126.148
ICMP dos攻击:
sudo hping3 -c 10000 -d 120 --icmp -w 64 -p 80 --flood --rand-source 192.168.126.148
SYN dos攻击:(注意下对方防火墙是否关闭)
sudo hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source 192.168.126.148

💡参数释义

  • -h --help 显示帮助

  • -v --version 显示版本

  • -c --count 发送数据包的数目

  • -i --interval 每个数据包的时间间隔 (uX X 表示微秒, 示例:-i u1000)

    • --fast 等价 -i u10000 (每秒发送 10 个数据包)

    • --faster 等价 -i u1000 (每秒发送 100 个数据包)

    • --flood 尽最快发送数据包,不显示回复。

  • -n --numeric 数字化输出,象征性输出主机地址。

  • -q --quiet 安静模式

  • -I --interface 网卡接口 (默认是路由接口)

  • -V --verbose 详细模式

  • -D --debug 调试信息

  • -z --bind 绑定 ctrl+z 到 ttl (默认为目的端口)

  • -Z --unbind 取消绑定 ctrl+z 键

    • --beep 对于接收到的每个匹配数据包蜂鸣声提示

💡模式选择

default mode TCP // 默认模式是 TCP

  • -0 --rawip 原始 IP 模式。即裸 IP 方式。使用 RAWSOCKET 方式。

    • 在此模式下 hping 会发送带数据的 IP 头。

  • -1 --icmp ICMP 模式

  • -2 --udp UDP 模式

  • -8 --scan 扫描 模式。示例:hping --scan 1-30,70-90 -S www.target.host

  • -9 --listen 监听 模式

💡IP 模式

  • -a --spoof 源地址欺骗。

    • 伪造 IP 攻击,防火墙就不会记录你的真实 IP,当然回应的包你也接收不到。

  • --rand-dest 随机目的地址模式。详细使用 man 命令

  • --rand-source 随机源地址模式。详细使用 man 命令

  • -t --ttl 设置 ttl (默认 64)

  • -N --id 设置 hping 中的 ID 值,默认随机值

  • -W --winid 使用 win* id 字节顺序。

    • 使用 winid 模式,针对不同的操作系统。UNIX ,WINDIWS 的 id 回应不同的,

    • 选项可以让你的 ID 回应和 WINDOWS 一样。

  • -r --rel 相对 id 字段 (估计主机流量)。更改 ID 的,可以让 ID 曾递减输出,详见 HPING-HOWTO。

  • -f --frag 拆分数据包成更多的 frag。即 一个数据包 分段 成多个数据包,

    • 可以测试对方或者交换机碎片处理能力,缺省 16 字节。(可能会通过弱的 ACL 限制)

  • -x --morefrag 设置更多的分段标志。大量碎片,泪滴攻击。

  • -y --dontfrag 设置不分段的标志。即发送不可恢复的 IP 碎片,

    • 通过这个可以让你了解更多的 MTU PATH DISCOVERY。

  • -g --fragoff 设置断偏移。

  • -m --mtu 设置虚拟 MTU 值,如果 packet size > mtu 时,实现 --frag。

  • -o --tos type of service (default 0x00), try --tos help

  • -G --rroute 显示路由缓存,包括 RECORD_ROUTE 选项

    • --lsrr 松散源路由和路由记录

    • --ssrr 严格的源路由和路由记录

  • -H --ipproto 设置 IP 协议字段,仅在 RAW IP 模式下使用

💡ICMP 模式

  • -C --icmptype icmp 类型 (默认回显请求)

  • -K --icmpcode icmp 码 (默认 0)

    • --force-icmp 发送所有 icmp 类型 (默认只发送支持的类型)

    • --icmp-gw 设置 ICMP 重定向网关。(默认 0.0.0.0) // ICMP 重定向

    • --icmp-ts 等同 --icmp --icmptype 13 (ICMP 时间戳)

    • --icmp-addr 等同 --icmp --icmptype 17 (ICMP 地址 子网 掩码)

    • --icmp-help 显示其他 icmp 选项帮助 // ICMP 帮助

💡UDP/TCP 模式

  • -s --baseport 源端口 (默认随机)

  • -p --destport [+][+]<port> 目的端口 (默认 0) ctrl+z inc/dec

  • -k --keep 保持源端口。即源端口不关闭,一直处于监听状态

  • -w --win winsize (default 64)。win 的滑动窗口。windows 发送字节 (默认 64)

  • -O --tcpoff 伪造 tcp 数据偏移量 (用来代替 "tcp 地址长度 / 4")

  • -Q --seqnum 仅显示 tcp 序列号

  • -b --badcksum (尝试) 发送带有错误 checksum 的 IP 数据包。

    • 许多系统将修复发送数据包的 IP 校验和。

    • 所以你会得到错误 UDP/TCP 校验和。

  • -M --setseq 设置 TCP 序列号

  • -L --setack set TCP ack (注意:不是设置 TCP ACK 的 flag)

  • -F --fin set FIN flag

  • -S --syn set SYN flag

  • -R --rst set RST flag

  • -P --push set PUSH flag

  • -A --ack set ACK flag (注意:设置 TCP ACK 的 flag)

  • -U --urg set URG flag // 一大堆 IP 数据包头的设置。

  • -X --xmas set X unused flag (0x40)

  • -Y --ymas set Y unused flag (0x80)

    • --tcpexitcode use last tcp->th_flags as exit code

    • --tcp-mss 用给定的值,启用并设置 TCP MSS

    • --tcp-timestamp 启用 TCP 时间戳 来猜测 HZ/uptime

💡设置

  • -d --data 数据大小 (默认是 0)

  • -E --file 从文件获取数据

  • -e --sign 添加 'signature'

  • -j --dump 转储为 16 进制数据包

  • -J --print 转储为可打印字符

  • -B --safe 启用「安全」协议

  • -u --end 告诉 --file 何时到达 EOF 并阻止倒回。

  • -T --traceroute 追踪模式。(等同 --bind and --ttl 1)

    • --tr-stop 在 追踪模式 下收到第一个不是 ICMP 时退出

    • --tr-keep-ttl 保持源 TTL 固定,对仅监控一跳很有用

    • --tr-no-rtt 不要在 traceroute 模式下计算 / 显示 RTT 信息 ARS 数据包描述 (新增功能,不稳定的)

    • --apd-send 发送用 APD 描述的数据包 (参见 docs/APD.txt)

📟四层发现(传输层)

🎈nmap

NMap,也就是 Network Mapper,是 Linux 下的网络扫描和嗅探工具包。

四大探测

# 主机发现
nmap -sn 192.168.4.0/24
nmap -Pn 192.168.4.0/24
nmap -sS 192.168.4.0/24

# 端口探测
nmap -sT -T 5 -p- 192.168.4.171 
nmap -sT --min-rate=10000 -p- 192.168.4.171 
nmap -sU -T 5 -p- 192.168.4.171 

# 详细详细探测
nmap -sT -sV -O -sC --min-rate=10000 -p80,8080,135,139,445,3306,8009 192.168.4.171 

# 漏洞探测
nmap --script=vuln --min-rate=10000 -p80,8080,135,139,445,3306,8009 192.168.4.171 -oN 123.txt

🎈Masscan

号称五分钟扫遍全网

Masscan 性能优越,极限速度可以从单机每秒发送 1000 万个数据包。

Masscan 使用了与另一个著名的扫描工具 —— nmap 类似的命令行参数

masscan 0.0.0.0/0 -p0-65535		扫遍全网
sudo masscan 192.168.126.128 -p80,3389,22,23,21

🎈rustscan

Rust 语言

能联动 nmap

sudo ./rustscan -a 192.168.126.148
sudo ./rustscan -a 192.168.126.148 -- -A		# 联动nmap探测

🎈fscan

综合型的扫描器

sudo ./fscan -h 192.168.4.0/24
sudo ./fscan -h 192.168.4.171

⚔️ARP 攻击

ARP 攻击就是通过伪造 IP 地址和 MAC 地址实现 ARP 欺骗,能够在网络中产生大量的 ARP 通信量使网络阻塞。攻击者只要持续不断的发出伪造的 ARP 响应包就能更改主机 ARP 缓存中的 IP-MAC 条目,造成网络中断或中间人攻击。

攻击机:192.168.126.175

目标:192.168.126.148

sudo arpspoof -i eth0 -t 192.168.126.148 -r 192.168.126.2

在 kali 上开启路由转发

echo 1>/proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

尝试获取对方操作

driftnet -i etho -d /home/kali/Desktop/1

🧸参考文献