python的scapy基础使用

Scapy库

解决三个问题:

  • 监听流量(与wireshark相同)

  • 分析流量

  • 编辑流量数据包(链路层 网络层 传输层),应用层也可以编辑 意义不大

提供两种操作方式

  • 基于命令进行交互

  • python代码调用

基于命令进行交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-377DHYTf-1662114007113)(file://F:\笔记图片\2022-08-31-22-02-21-image.png?msec=1662113046113)]

1、sniff流量嗅探

# 显示所有的网卡
show_interfaces()


# count指定抓取包的个数 iface指定网卡 filter过滤条件 prn回调函数 sprimtf()函数控制输入信息
pkg = sniff(count=10,iface='xx')
pkg[0].show() # 详细信息
pkg[3][Raw].load # 查看字段信息
pkg[15].summary() # 查看标识信息

2、读写流量文件

# 写
wrpcap('./test.cap',pkg)
# 读
pkg = rdpacp('./test.cap')

3、发送数据包

# / 代表从左到右 一层一层的  最左边是最底层的 
# 发送最基本的ICMP数据包
send(IP(dst='192.168.xx.xx')/ICMP())

# 发送带载荷的ICMP数据包(带有payload的标准ping)
pkg=send(IP(src='192.168.xx.xx',dst='192.168.xx.xx')/ICMP()/'JHHHHHHHHHHHHHHHHHHHHH')

# 发送五次相同的数据包 每次间隔1秒
 send(pkg,inter=1,count=5)

# 发送数据包并接受响应
pkg = sr1(IP(dst='192.168.xx.xx')/ICMP()/'xxxxxxx')
# 可以使用 []. 的方式获取下面的属性
pkg[ICMP].type


# 发送ARP
pkg = sr1(ARP(psrc='192.168.xx.xx',pdst='192.168.xx.xx'),timeout=3)

pkg = ARP(psrc='192.168.10.22',pdst='192.168.10.1')
reply = sr1(pkg,timeout=3,verbose=False) # verbose不回显详细信息


# 半连接 TCP组包
pkg = IP(dst='192.168.xxx.xxx')/TCP(dport=80)

python代码调用

和命令行一样

from scapy.layers.l2 import ARP
from scapy.sendrecv import sr1
try:
    pkg = ARP(psrc='192.168.10.22',pdst='192.168.10.1')
    reply = sr1(pkg,timeout=3,verbose=False) # verbose不回显详细信息
    print(reply[ARP].hwsrc)
except TypeError:
    print(0)

模拟TCP请求

# scapy 模拟一次完整的三次握手:五元组--源ip 目的ip 源port 目的port 协议 S SA RA seq ack
ip = '192.168.10.231'
sport = random.randint(20000, 30000)  # 源端口
seq = random.randint(10000, 20000)  # 序列号
pkg_1 = IP(dst=ip) / TCP(sport=sport,dport=5555,flags='S',seq=seq)
reply_1 = sr1(pkg_1, timeout=3, verbose=False)
seq = reply_1[TCP].ack
ack = reply_1[TCP].seq + 1
pkg_2 = IP(dst=ip) / TCP(sport=sport, dport=5555, flags='A', seq=seq, ack=ack)
sr1(pkg_2, timeout=3, verbose=False)

# 三次握手完成之后发送消息
reply_3 = sr1(IP(dst=ip) / TCP(sport=sport, dport=5555, flags='PA',seq=seq,ack=ack) / "你好吗?")
time.sleep(1)
print(reply_3[Raw].load.decode())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值