「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」
Scapy篇
usage阅读
对应相关命令
| 命令 | 效果 |
|---|---|
| pkg.show() | 显示包的视图 |
| pkg.pkg.show2() | 显示包的另一种视图 |
| pkg.sprintf | 用数据包的方式显示 |
| pkg.command | 返回可生成数据包的scapy命令 |
| send | 发送一个数据包 |
| sendp | 发送一个数据包 |
| sr1 | 发送一个数据包并接收一个应答即返回 |
| sr | 发送一个数据包并接收应答 |
syn扫描
比如向google的80端口发送一个syn包,并在收到单个响应后退出
sr1=(IP(dst='72.14.207.99')/TCP(dport=80,flags='S'))
循环发送和接收
循环发送数据包
srloop(IP(dst='www.target.com/30')/TCP())
ACK 扫描
模拟ACK扫描
ans,unans = sr(IP(dst='www.xxx.com')/TCP(dport=[80,666],flags='A'))
我们可以在应答数据包中找到未过滤的端口:
>>> for s,r in ans:
... if s[TCP].dport == r[TCP].sport:
... print("%d is unfiltered" % s[TCP].dport)
ARP ping
在本地以太网上发现主机的最快方法是使用arp ping方法:
arping("192.168.1.*")
TCP ping
在某些主机禁止ping的情况,常规的ping是发现不了主机的,这个时候就可以使用TCP ping的方式
# 发起请求
ans, unans = sr( IP(dst="192.168.1.*")/TCP(dport=80,flags="S") )
# 获取结果
ans.summary( lambda s,r : r.sprintf("%IP.src% is alive") )
UDP ping
如果常规的ping禁止,TCP ping也无效,那么我们就可以使用万能的UDP ping:
ans, unans = sr( IP(dst="192.168.*.1-10")/UDP(dport=0) )
ans.summary( lambda s,r : r.sprintf("%IP.src% is alive") )