python的Scapy库的基础知识点汇总

Scapy 是一个强大的 Python 库,用于网络数据包的操作,包括数据包的生成、解析、嗅探和注入。以下是 Scapy 库的全部知识点汇总:

1. 安装与配置

安装 Scapy

使用 pip 安装:

pip install scapy

验证安装:

from scapy.all import *

2. 基本操作

数据包生成
  • 创建数据包:
pkt = IP(dst="8.8.8.8")/ICMP()
  • 层叠数据包:
pkt = Ether()/IP()/TCP()/"Hello, World!"
数据包字段
  • 查看数据包字段:
pkt.show()
  • 修改数据包字段:
pkt[IP].dst = "8.8.4.4"

3. 数据包发送与接收

发送数据包
  • 发送数据包:
send(pkt)
  • 发送并接收响应:
response = sr1(pkt)
嗅探数据包
  • 嗅探网络数据包:
sniff(filter="icmp", count=10, prn=lambda x: x.summary())
  • 停止嗅探:
packets = sniff(timeout=10)

4. 协议层

链路层
  • Ethernet 数据包:
eth = Ether(dst="ff:ff:ff:ff:ff:ff")
  • ARP 数据包:
arp = ARP(pdst="192.168.1.1")
网络层
  • IP 数据包:
ip = IP(dst="8.8.8.8")
  • ICMP 数据包:
icmp = ICMP()
传输层
  • TCP 数据包:
tcp = TCP(dport=80, flags="S")
  • UDP 数据包:
udp = UDP(dport=53)

5. 高级功能

数据包注入
  • 将数据包注入网络:
sendp(pkt)
数据包重放
  • 重放捕获的数据包:
packets = rdpcap("example.pcap")
sendp(packets)
数据包解析与构建
  • 从二进制数据解析数据包:
raw_pkt = b'\x00\x01\x02...'
pkt = Ether(raw_pkt)
  • 构建自定义协议:
class Custom(Packet):
    name = "Custom"
    fields_desc = [ByteField("field1", 0), ShortField("field2", 1)] 

6. 网络攻击与防御

ARP 欺骗
  • 执行 ARP 欺骗:
send(ARP(op=2, pdst="192.168.1.1", psrc="192.168.1.254", hwdst="ff:ff:ff:ff:ff:ff"))
DOS 攻击
  • SYN 洪水攻击:
send(IP(dst="target_ip")/TCP(dport=80, flags="S"))
检测和防御
  • 检测 ARP 欺骗:
def detect_arp_spoof(pkt):
    if ARP in pkt and pkt[ARP].op == 2:
        if pkt[ARP].psrc in arp_cache and arp_cache[pkt[ARP].psrc] != pkt[ARP].hwsrc:
            print("ARP Spoofing Detected!")
sniff(filter="arp", prn=detect_arp_spoof)

7. 工具集成与自动化

结合其他工具
  • 与 nmap 结合使用:
from scapy.layers.inet import IP, TCP
from scapy.sendrecv import sr1

for i in range(1, 255):
    ip = f"192.168.1.{i}"
    pkt = IP(dst=ip)/TCP(dport=80, flags="S")
    response = sr1(pkt, timeout=1, verbose=0)
    if response:
        response.show()
脚本化任务
  • 自动化网络扫描:
def scan_network(ip_range):
    for ip in ip_range:
        pkt = IP(dst=ip)/ICMP()
        response = sr1(pkt, timeout=1, verbose=0)
        if response:
            print(f"{ip} is up")

ip_range = [f"192.168.1.{i}" for i in range(1, 255)]
scan_network(ip_range)

8. Scapy工作上使用的实例场景

  • 实例:抓取TCP报文的flags,或者某一帧的以太网报文
from scapy.all import sniff
from scapy.layers.inet import IP, TCP

def packet_handler(packet):
    if packet.haslayer(TCP) and packet.haslayer(IP):
        src_ip = packet[IP].src
        dst_ip = packet[IP].dst
        src_port = packet[TCP].sport
        dst_port = packet[TCP].dport
        flags = packet[TCP].flags
        print(
            f"Source IP: {src_ip}, Destination IP: {dst_ip}, Source Port: {src_port}, Destination Port: {dst_port}, Flags: {flags}")

sniff(filter="tcp", prn=packet_handler)
  • 实例二:捕获TCP包并保存到本地 ,在本地分析包
from scapy.all import sniff
from scapy.utils import wrpcap

# 捕获10个TCP包
packets = sniff(filter="tcp", count=10)

# 保存到本地文件captured_packets.pcap
wrpcap("captured_packets.pcap", packets)

然后对这个离线包进行解析分析报文

from scapy.all import rdpcap
from scapy.layers.inet import IP, TCP

def packet_handler(packet):
    if packet.haslayer(TCP) and packet.haslayer(IP):
        src_ip = packet[IP].src
        dst_ip = packet[IP].dst
        src_port = packet[TCP].sport
        dst_port = packet[TCP].dport
        flags = packet[TCP].flags
        print(f"Source IP: {src_ip}, Destination IP: {dst_ip}, Source Port: {src_port}, Destination Port: {dst_port}, Flags: {flags}")

# 从文件读取数据包
packets = rdpcap("captured_packets.pcap")

# 处理每个数据包
for packet in packets:
    packet_handler(packet)

9. 学习资源与实践

官方文档
  • Scapy 官方文档和教程
书籍
  • 《Scapy 网络安全》
在线课程
  • Udemy、Coursera 等平台的 Scapy 课程
实践项目
  • 捕获与分析网络流量
  • 实现网络扫描器
  • 开发自定义网络工具

通过这些知识点的学习和实践,可以全面掌握 Scapy 的使用,并应用于各种网络安全与数据包操作的任务中。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scapy是一个强大的交互式数据包处理程序,使用Python编写。它可以伪造或解码各种网络协议的数据包,发送、捕获、匹配请求和回复包等等。它可以轻松处理一些常见操作,如端口扫描、tracerouting、探测、单元测试、攻击或网络发现。Scapy还具有一些其他优秀的特性,如发送无效数据帧、注入修改的802.11数据帧、解码加密通道(VOIP)上的WEP、ARP缓存攻击(VLAN)等。它是其他工具无法完成的任务的理想选择。\[3\] 在使用Scapy之前,你需要导入相关的模块。例如,你可以使用以下代码导入Scapy的相关模块: ``` from scapy.layers.inet import * from scapy.all import * ``` 接下来,你可以使用Scapy构造数据包、发送数据包、捕获数据包等等。你可以使用`IP()`、`TCP()`等函数构造不同类型的数据包,并使用`send()`或`sendp()`方法发送数据包。你还可以使用`sniff()`函数来捕获数据包,并指定过滤条件、网卡、处理函数和捕获数量等参数。你还可以使用`wrpcap()`和`rdpcap()`函数来保存和读取数据包。\[2\] 总之,Scapy是一个功能强大的Python,用于处理网络数据包。它提供了丰富的功能和灵活的接口,使得网络数据包的处理变得更加简单和高效。 #### 引用[.reference_title] - *1* *2* [Python-scapy](https://blog.csdn.net/qingguaxiaoxiao/article/details/131170191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python———scapy(数据包发送)](https://blog.csdn.net/weixin_43803070/article/details/90549701)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值