
root㉿kali-2024)-[/home/ljs/Desktop]
└─# scapy
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
apt-get install python-matplotlib>>> exit()apt-get install python-matplotlib
再次进入就没有提示信息了

###[ ARP ]### # ARP 数据包的开始标记
hwtype = Ethernet (10Mb) # 硬件类型:以太网 (10Mb/s)
# 这是 ARP 使用的硬件类型,表示使用的是以太网。
ptype = IPv4 # 协议类型:IPv4
# 表示被解析的协议类型是 IPv4(互联网协议版本4)。
hwlen = None # 硬件地址长度:未定义
# 硬件地址的长度,通常以太网地址为 6 字节,这里为 None 可能是未被设置。
plen = None # 协议地址长度:未定义
# 协议地址的长度,IPv4 地址通常为 4 字节,这里也为 None 可能是未被设置。
op = who-has # 操作码:请求方谁拥有(who-has)
# 表示 ARP 操作的类型,这里是请求 (who-has),询问特定 IP 地址的 MAC 地址。
hwsrc = 00:0c:29:08:d2:3a # 源硬件地址:00:0c:29:08:d2:3a
# 发送此 ARP 请求的设备的 MAC 地址。
psrc = 192.168.79.135 # 源协议地址:192.168.79.135
# 发送此 ARP 请求的设备的 IP 地址。
hwdst = 00:00:00:00:00:00 # 目标硬件地址:00:00:00:00:00:00
# 目标设备的 MAC 地址,此处为全零,表示不确定或广播请求。
pdst = 0.0.0.0 # 目标协议地址:0.0.0.0
# 目标设备的 IP 地址,此处为 0.0.0.0,通常表示该请求是为了查找某个具体的 IP 地址。
>>> sr1(ARP(pdst="192.168.79.2"))
sr1 函数作用:sr1 函数包含了发送数据包和接收数据包的功能。Begin emission:
.........................Finished sending 1 packets.
...*
Received 29 packets, got 1 answers, remaining 0 packets
<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=f0:98:38:b8:e0:92
psrc=192.168.1.1 hwdst=00:0c:29:6a:cf:1d pdst=192.168.1.53 |<Padding
load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
|>>
>>> exit() 发现源地址 psrc=192.168.79.2,说明已经收到网关的应答包。
IP().display()
###[ IP ]### # IP 数据包的开始标记
version = 4 # 版本:4
# 表示 IP 协议的版本,这里是 IPv4(互联网协议版本4)。
ihl = None # 首部长度:未定义
# 表示 IP 首部的长度,通常以 32 位字为单位,None 表示未设置。
tos = 0x0 # 服务类型:0x0
# 服务类型字段,用于指示数据包的优先级和处理方式,此处为 0,表示默认优先级。
len = None # 总长度:未定义
# 包含 IP 首部和数据部分的总长度,通常以字节为单位,None 表示未设置。
id = 1 # 标识符:1
# 用于标识数据包的唯一标识符,通常在分片时使用。
flags = # 标志位:无
# 用于控制数据包的分片行为,此处没有设置标志。
frag = 0 # 分片偏移:0
# 表示数据包是否分片及其偏移量,0 表示没有分片。
ttl = 64 # 生存时间:64
# 表示数据包在网络中的最大生存时间,通常用于防止数据包在网络中无休止地传播,值为 64。
proto = hopopt # 协议:hopopt
# 表示上层协议的类型,此处为 “hopopt”,即跳跃选项协议。
chksum = None # 校验和:未定义
# 用于验证 IP 数据包的完整性,None 表示未计算校验和。
src = 127.0.0.1 # 源地址:127.0.0.1
# 发送数据包的设备的 IP 地址,此处为回环地址,表示本地设备。
dst = 127.0.0.1 # 目标地址:127.0.0.1
# 接收数据包的设备的 IP 地址,此处为回环地址,表示本地设备。
\options \ # 选项:无
# IP 数据包可以包含选项字段,此处没有设置选项。
ICMP().display()

>>> sr1(IP(dst="192.168.1.1")/ICMP(),timeout=1)


>>> TCP().display()
###[ TCP ]###
sport = ftp_data
dport = http
seq = 0
ack = 0
dataofs = None
reserved = 0
flags = S
window = 8192
chksum = None
urgptr = 0
options = ''
查看TCP()函数的用法字段详解说明
###[ TCP ]### # TCP 数据包的开始标记
sport = ftp_data # 源端口:ftp_data
# 表示发送方使用的端口号,此处为 FTP 数据端口,通常为 20。
dport = http # 目标端口:http
# 表示接收方使用的端口号,此处为 HTTP 端口,通常为 80。
seq = 0 # 序列号:0
# 表示数据包的序列号,用于跟踪数据流的顺序,此处为 0,通常在连接建立时。
ack = 0 # 确认号:0
# 表示期望接收的下一个序列号,此处为 0,可能表示此数据包为初始连接。
dataofs = None # 数据偏移:未定义
# 表示 TCP 首部的长度,通常以 32 位字为单位,None 表示未设置。
reserved = 0 # 保留字段:0
# 保留字段,通常用于将来的扩展,当前设置为 0。
flags = S # 标志位:S (SYN)
# 表示 TCP 标志位,这里为 SYN,表示这是一个连接请求数据包。标志域,紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN
window = 8192 # 窗口大小:8192
# 表示接收方可以接收的数据量,单位为字节,这里为 8192。
chksum = None # 校验和:未定义
# 用于验证 TCP 数据包的完整性,None 表示未计算校验和。
urgptr = 0 # 紧急指针:0
# 指示紧急数据的结束位置,此处为 0,表示没有紧急数据。
options = '' # 选项:无
# TCP 数据包可以包含选项字段,此处没有设置选项。sr1(IP(dst="192.168.1.1")/TCP(flags="S" ,dport=80),timeout=1)
flags=”S”表示 SYN 数据包
dport=80 表示目标端口 80

1. 目标网络可伪造源地址进行访问 2. 选择僵尸机,僵尸机需要在互联网上是一个闲置的操作系统,需要系统使用递增的 IPID,比如:XP 系统。
nmap 和 ping 都会直接和目标机器接触。 如何可以不直接目标主机接触,还可以探测出目标主机是否开放端口?



(1)、攻击者向僵尸机发送 SYN/ACK 确认包。 (2)、僵尸主机返回我们 RST 数据包关闭链接,数据包中包含了 IPID 信息。假设 IPID=X 注意:三次握手的第一个包是 SYN,目标主机收到 SYN 才会应答 SYN/ACK,因为僵尸主机没有向我们发送 SYN 请求。所以僵尸主机返回我们 RST 数据包关闭链接。

(1)、攻击者修改 IP 包头的 SRC 字段为僵尸主机的 IP,伪装成僵尸主机给目标主机发 SYN 请求。 (2)、目标主机收到请求,如果端口是开放的就会返回给僵尸主机一个 SYN/ACK 的数据包。 (3)、僵尸主机收到目标主机发来的 SYN/ACK 确认包,因为僵尸主机没有给你发 SYN 请求。所以僵尸主机给目标主机返回了一个 RST 数据包。这个数据包表示关闭连接。 此僵尸主机对外发出一个数据包,所以僵尸主机的 IPID 值+1。此时 IPID 值为 X+1。
(1)、攻击者再次向僵尸主机发送 SYN/ACK 确认包 (2)、僵尸主机同样向攻击者返回了一个 RST 数据包,此僵尸主机对外又发出一个数据包,所以僵尸主机的 IPID 值再+1。此时 IPID 值为 X+2。
(1)、攻击者查看僵尸主机返回的数据包中 IPID 值为 X+2。 (2)、攻击者对比在第一步中的 IPID 值 X,发现增加了 2。 :肯定目标主机和僵尸主机通信了,能通信,就说明目标主机端口是开放的。
肯定目标主机和僵尸主机没有通信了。没能通信,就说明目标主机端口是关闭的。


提取码:3vt7
提取码:p43p

rz1=sr1(IP(dst="192.168.1.54")/TCP(dport=445,flags="SA"))
命令详解:
rz1 表示定义了一个变量来接受我们返回的数据包
dst 表示我们的僵尸主机 IP
dport=445 表示我们向僵尸主机的 445 端口发送数据包,XP 主机的 445 端口一般都是开启状态
flags=“SA”表示发送 SYN/ACK查看一下 IPID
>>> rz1.display()
display()表示查看变量中的内容。我们只需要查看 IP 下面的 ID 字段即可rt=sr1(IP(src="192.168.1.54",dst="192.168.1.63")/TCP(dport=22),timeout=1)
命令详解
rt 表示定义了一个变量来接受我们返回的数据包
src 表示伪造成僵尸主机的 IP 地址
dst 表示将数据包发送目标主机
dport 目标端口
timeout 超时时间
rz2=sr1(IP(dst="192.168.1.54")/TCP(dport=445,flags="SA"))
>>> rz1.display()
>>> rz2.display()
将第二步的端口修改成 222 因为 222 肯定是没有开启的端口
>>>rz1=sr1(IP(dst="192.168.1.54")/TCP(dport=445,flags="SA"))
>>>rt=sr1(IP(src="192.168.1.54",dst="192.168.1.63")/TCP(dport=222),timeout=1)
>>>rz2=sr1(IP(dst="192.168.1.54")/TCP(dport=445,flags="SA"))
>>> rz1.display()
>>> rz2.display()
root@xuegod53:~# nmap 192.168.1.0/24 -p1-1024 --script=ipidseq.nse > a.txt
-p1-1024 #指定扫描的端口范围为 1 到 1024。只扫描常用端口就可以了
--script=ipidseq.nse 判断主机是否可以当做僵尸主机root@xuegod53:~# vim a.txt #在文档中查找关键字 Incremental
Incremental 增量式;增量备份;增量的;渐进的;增量法 表示主机 IPID 为递增,可以做为僵尸主机。 另外发现 192.168.1.32 也可以的。
root@xuegod53:~# netdiscover
我们发现不仅 XP 可以做僵尸主机,各种 android 手机的 IPID 也是递增,也可以做僵尸主机。
root@xuegod53:~# nmap 192.168.1.63 -sI 192.168.1.54 -p1-100
-sI 参数表示指定僵尸主机进行扫描目标主机。注意是大写的 I
