nf_conntrack连接跟踪模块

Linux系统nf_conntrack连接跟踪机制简介 1、前言 前段时间接手的一个连接跟踪表满导致网络不通的问题,因此对linux系统的连接跟踪模块进行了学习。本文梳理一下目前对nf_conntrack模块的一些个人理解。 2、连接跟踪机制 背景知识:netfilter Netfilter是一个内核架构,是集成到linux内核协议栈的一套防火墙系统,可通过用户空间(iptables等)的工具来把相关配置下发给Netfilt... 阅读详情


nf_conntrack连接跟踪模块

在iptables里,包是和被跟踪连接的四种不同状态有关的。它们分别是NEW,ESTABLISHED,RELATED和INVALID。后面我们会深入地讨论每一个状态。使用iptables的state模块可以匹配操作这几种状态,我们能很容易地控制“谁或什么能发起新的会话”。为什么需要这种状态跟踪机制呢?比如你的80端口开启,而你的程序被植入反弹式木马,导致服务器主动从80端口向外部发起连接请求,这个时候你怎么控制呢。关掉80端口,那么你的网站也无法正常运行了。但有了连接跟踪你就可以设置只允许回复关于80端口的外部请求(ESATBLISHED状态),而无法发起向外部的请求(NEW状态)。所以有了连接跟踪就可以做到在这种层面上的限制,慢慢往下看就明白了各状态的意义。

所有在内核中由Netfilter的特定框架做的连接跟踪称作conntrack(connection tracking)。conntrack可以作为模块安装,也可以作为内核的一部分。大部分情况下,我们想要也需要更详细的连接跟踪,这是相比于缺省的conntrack而言。也因为此,conntrack中有许多用来处理TCP,UDP或ICMP协议的部件。这些模块从数据包中提取详细的、唯一的信息,因此能保持对每一个数据流的跟踪。这些信息也告知conntrack流当前的状态。例如,UDP流一般由他们的目的地址、源地址、目的端口和源端口唯一确定。

在以前的内核里,我们可以打开或关闭重组功能。然而连接跟踪被引入内核后,这个选项就被取消了。因为没有包的重组,连接跟踪就不能正常工作。现在重组已经整合入conntrack,并且在conntrack启动时自动启动。不要关闭重组功能,除非你要关闭连接跟踪。

除了本地产生的包由OUTPUT链处理外,所有连接跟踪都是在PREROUTING链里进行处理的,意思就是, iptables会在PREROUTING链里从新计算所有的状态。如果我们发送一个流的初始化包,状态就会在OUTPUT链里被设置为NEW,当我们收到回应的包时,状态就会在PREROUTING链里被设置为ESTABLISHED。如果第一个包不是本地产生的,那就会在PREROUTING链里被设置为NEW状态。综上,所有状态的改变和计算都是在nat表中的PREROUTING链和OUTPUT链里完成的。

conntrack默认最大跟踪65536个连接,查看当前系统设置最大连接数

  1. [root@server ~] # cat /proc/sys/net/netfilter/nf_conntrack_max
  2. 65536

查看连接跟踪有多少条目

  1. [root@server ~] # cat /proc/sys/net/netfilter/nf_conntrack_count
  2. 1

当服务器连接多于最大连接数时会出现kernel: ip_conntrack: table full, dropping packet的错误。

解决方法,修改conntrack最大跟踪连接数:

  1. [root@server ~] # vim /etc/sysctl.conf
  2. [root@server ~] # sysctl -p
  3. net.nf_conntrack_max = 100000

查看established连接状态最多保留几天,默认是432000秒,就是5天;如果觉得时间太长可以修改。还有各种tcp连接状态的保留时间,都可以修改的。

  1. [root@server ~] # cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
  2. 432000

连接跟踪(conntrack)记录

IP_conntrack模块根据IP地址可以实时追踪本机TCP/UDP/ICMP的连接详细信息并保存在内存中“/proc/net/nf_conntrack”文件中(Centos5中使用的是/proc/net/ip_conntrack)。查看这个文件的记录会有如下信息:

  1. ipv4 2 tcp 6 89 SYN_SENT src= 101.81. 225.225 dst= 112.74. 99.130 sport= 33952 dport= 80
  2. src= 112.74. 99.130 dst= 101.81. 225.225 sport= 80 dport= 33952 [UNREPLIED] mark= 0 secmark= 0 use= 2
  3. 1
  4. 2
  5. ipv4 2 tcp 6 89 SYN_SENT src= 101.81. 225.225 dst= 112.74. 99.130 sport= 33952 dport= 80
  6. src= 112.74. 99.130 dst= 101.81. 225.225 sport= 80 dport= 33952 [UNREPLIED] mark= 0 secmark= 0 use= 2

IP_conntrack模块维护的所有信息都包含在这个例子中了,通过它们就可以知道某个特定的连接处于什么状态。首先显示的是IP类型,然后是协议,这里是tcp,接着是十进制的6(tcp的协议类型代码是6)。之后的89是这条conntrack记录的生存时间(TTL),它会有规律地被消耗,直到收到这个连接的更多的包。那时,这个值就会被设为当时那个状态的缺省值。接下来的是这个连接在当前时间点的状态。上面的例子说明这个包处在状态 SYN_SENT,这个值是iptables显示的,以便我们好理解,而内部用的值稍有不同。SYN_SENT说明我们正在观察的这个连接只在一个方向发送了一TCP SYN包。再下面是源地址、目的地址、源端口和目的端口。最后,是希望接收的应答包的信息,他们的地址和端口和前面是相反的。其中有个特殊的词[UNREPLIED],说明这个连接还没有收到任何回应。

当一个连接在两个方向上都有传输时,conntrack记录就删除[UNREPLIED]标志,然后重置。在末尾有[ASSURED]的记录说明两个方向已没有流量。

  1. ipv4 2 tcp 6 431962 ESTABLISHED src= 101.81. 225.225 dst= 112.74. 99.130 sport= 33952 dport= 80
  2. src= 112.74. 99.130 dst= 101.81. 225.225 sport= 80 dport= 33952 [ASSURED] mark= 0 secmark= 0 use= 2
  3. 1
  4. 2
  5. ipv4 2 tcp 6 431962 ESTABLISHED src= 101.81. 225.225 dst= 112.74. 99.130 sport= 33952 dport= 80
  6. src= 112.74. 99.130 dst= 101.81. 225.225 sport= 80 dport= 33952 [ASSURED] mark= 0 secmark= 0 use= 2

这样的记录是确定的,在连接跟踪表满时,是不会被删除的,没有[ASSURED]的记录就要被删除。连接跟踪表能容纳多少记录是被一个变量控制的,默认值取决于你的内存大小,128MB可以包含8192条目录,256MB是16376条,在拥有较大内存的机器中默认65536条。对于一个高并发的web服务器来说,如果你的请求数大过/proc/sys/net/netfilter/nf_conntrack_max文件中定义的数目,那么就会出现用户连接失败并且报错,报错信息如下:

  1. nf_conntrack: table full, dropping packet.
  2. 1
  3. nf_conntrack: table full, dropping packet.

而我们第一时间想到的办法就是关闭防火墙或是增大默认连接数,修改默认最大值,如下:

  1. [root@localhost ~] # echo "100000" > /proc/sys/net/netfilter/nf_conntrack_max
  2. 1
  3. [root@localhost ~] # echo "100000" > /proc/sys/net/netfilter/nf_conntrack_max

但不要盲目增大nf_conntrack_max的值-理解Linux内核内存分配

连接追踪模块属于内核的,所以我们知道所有的连接跟踪信息都是保存于内存中的,因此会考虑单纯放大这个nf_conntrack_max参数会占据多少内存,会权衡内存的占用,如果系统没有太大的内存,就不会将此值设置的太高。但是如果你的系统有很大的内存呢?比如有8G的内存,分个1G给连接跟踪也不算什么啊,这是合理的,然而在传统的32位架构Linux中是做不到,为什么?首先32位架构中最大寻址能力是4G,而Linux内存管理是虚拟内存的方式,4G内存分给内存的是1G,其他3G是理论上分给单个进程的,每个进程认为自己有3G内存可用,最后是根据每个进程实际使用的内存映射到物理内存中去。

内存越来越便宜的今天,Linux的内存映射方式确实有点过时了。然而事实就摆在那里,nf_conntrack处于内核空间,它所需的内存必须映射到内核空间,而传统的32位Linux内存映射方式只有1G属于内核,这1G的地址空间中,前896M是和物理内存一一线性映射的,后面的若干空洞之后,有若干vmalloc的空间,这些vmalloc空间和一一映射空间相比,很小很小,算上4G封顶下面的很小的映射空间,一共可以让内核使用的地址空间不超过1G。对于ip_conntrack来讲,由于其使用slab分配器,因此它还必须使用一一映射的地址空间,这就是说,它最多只能使用不到896M的内存!

为何Linux使用如此“落后”的内存映射机制这么多年还不改进?其实这种对内核空间内存十分苛刻的设计在64位架构下有了很大的改观,也可以放心根据内存调整最大连接追踪条目了。但问题依然存在,即使64位架构,内核也无法做到透明访问所有的物理内存,它同样需要把物理内存映射到内核地址空间后才能访问,对于一一映射,这种映射是事先确定的,对于大小有限(实际上很小)非一一映射空间,需要动态创建页表,页目录等。所以条目太多就会消耗性能且会产生内存碎片。另外如果不需要用到连接跟踪功能可以选择在Iptables中关闭,以此来提高系统的网络连接性能(因为开启会产生大量的IO操作)。卸载ip_conntrack模块如下,必须要先关闭防火墙才能卸载。另外注意当你试图查看iptables规则之后,就会激活ip_conntrack模块,无法真正卸载掉哦。

  1. $ service iptables stop
  2. $ modprobe -r nf_conntrack
  3. 1
  4. 2
  5. $ service iptables stop
  6. $ modprobe -r nf_conntrack

查看实时连接信息

查看ip_conntrack实时连接状态信息,安装iptstate工具

yum -y install iptstate     

执行命令

[root@server ~]# iptstate  

如下所示

相关的内核参数

  1. [root@server ~] # sysctl -a | grep conntrack
  2. net.netfilter.nf_conntrack_acct = 0
  3. net.netfilter.nf_conntrack_buckets = 16384
  4. net.netfilter.nf_conntrack_checksum = 1
  5. net.netfilter.nf_conntrack_count = 1
  6. net.netfilter.nf_conntrack_events = 1
  7. net.netfilter.nf_conntrack_events_retry_timeout = 15
  8. net.netfilter.nf_conntrack_expect_max = 256
  9. net.netfilter.nf_conntrack_generic_timeout = 600
  10. net.netfilter.nf_conntrack_helper = 1
  11. net.netfilter.nf_conntrack_icmp_timeout = 30
  12. net.netfilter.nf_conntrack_log_invalid = 0
  13. net.netfilter.nf_conntrack_max = 65536
  14. net.netfilter.nf_conntrack_tcp_be_liberal = 0
  15. net.netfilter.nf_conntrack_tcp_loose = 1
  16. net.netfilter.nf_conntrack_tcp_max_retrans = 3
  17. net.netfilter.nf_conntrack_tcp_timeout_close = 10
  18. net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
  19. net.netfilter.nf_conntrack_tcp_timeout_established = 432000
  20. net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
  21. net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
  22. net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
  23. net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
  24. net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
  25. net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
  26. net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
  27. net.netfilter.nf_conntrack_timestamp = 0
  28. net.netfilter.nf_conntrack_udp_timeout = 30
  29. net.netfilter.nf_conntrack_udp_timeout_stream = 180
  30. net.nf_conntrack_max = 65536

也可以使用 dmesg 查看。

  1. [ root@server ~] # dmesg | tail -f
  2. [ 3.656918] ppdev: user-space parallel port driver
  3. [ 3.680022] alg: No test for __gcm-aes-aesni (__driver-gcm-aes-aesni)
  4. [ 3.772029] alg: No test for crc32 (crc32-pclmul)
  5. [ 3.785294] intel_rapl: no valid rapl domains found in package 0
  6. [ 7.120138] EXT4-fs (vda1): resizing filesystem from 786176 to 5242304 blocks
  7. [ 7.422160] EXT4-fs (vda1): resized filesystem to 5242304
  8. [ 1994.617368] nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
  9. [ 3657.011241] nr_pdflush_threads exported in /proc is scheduled for removal
  10. [ 4538.293958] Netfilter messages via NETLINK v0.30.
  11. [ 4538.300128] ctnetlink v0.93: registering with nfnetlink.
转自:https://awen.me/post/59062.html?from=timeline
个人分类:  自动化运维--服务
Linux协议栈-netfilter(2)-conntrack 连接跟踪(conntrack)用来跟踪和记录一个连接的状态,它为经过协议栈的数据包记录状态,这为防火墙检测连接状态提供了参考,同时在数据包需要做NAT时也为转换工作提供便利。本文基于Linux内核2.6.31实现的conntrack进行源码分析。1. conntrack模块初始化1.1 conntrack模块入口conntrack模块的初始化主要就是为必要的全局数据结构进行初始化,代码流程如下:上... 阅读详情

相关推荐

深入Linux内核:nf_conntrack连接跟踪模块是如何‘记住’你的网络连接的?

本文深入解析Linux内核中的nf_conntrack连接跟踪机制,揭示其如何记录和管理网络连接状态。通过详细分析连接跟踪的基础架构、状态机与四表机制,以及数据包处理流程,帮助开发者理解并优化这一核心网络功能,提升服务器性能。

weixin_30296405的博客 354

linux iptables nf_conntrack 简介

目录 nf_conntrack模块常用命令 nf_conntrack会话表的内容解释 nf_conntrack相关内核参数和解释 如何判断会话表是否满 会话表满的解决办法 计算公式 nf_conntrack(在老版本的 Linux 内核中叫 ip_conntrack)是一个内核模块,用于跟踪一个连接的状态的。连接状态跟踪可以供其他模块使用,最常见的两个使用场景是 iptables 的 nat 的 state 模块。 iptables 的 nat 通过规则来修改目的/源地址,但光修改地址不行,我

whatday的专栏 3703

Krylov子空间与Arnoldi过程

一、应用背景 Krylov子空间方法是模型降阶(MOR)的一种,Krylov 子空间方法就是在Krylov子空间中寻找近似解。 二、Krylov子空间 n是原始矩阵的维度,m为降阶后矩阵的维度,通常m<<n。 三、Arnoldi 过程: 计算Km 的一组正交 对应上述MGS过程的python代码: import numpy as np def arnoldi_itera...

保持写作习惯,完成知识沉淀 6004

Iptables之nf_conntrack模块

表示分组对应的连接已经进行了双向的分组传输,也就是说连接已经建立,而且会继续匹配 这个连接的包。通过系统初始化脚本创建配置文件”/etc/modprobe.d/nf_conntrack.conf”, 内容为“options nf_conntrack hashsize=262144”,通过nf_conntrack模块挂接参数”hashsize”自动设置“net.nf_conntrack_max=2097152”(nf_conntrack_max=hashsize*8),保证后续新初始化服务器配置正确。

u011029104的专栏 2288

CAS5和CAS6自定义异常提示消息

CAS自定义异常提示消息

weixin_42949219的博客 980

使用QGIS配准无人机航片

随着无人机在各个行业的普及,无人机航片成为很多应用系统空间数据的重要来源。无人机航片具有成像快、分辨率高、针对性强的优点,广泛用于保险定损、灾情应急监测、设施巡检、农作物面积调查等方面。 然而,由于种种原因,通过无人机拍摄的照片拼接得到的正射航片与其他地理空间数据叠加时经常出现较明显的偏差,需要进行配准以校正其空间位置,因此,本文将使用QGIS的配准工具演示无人机正射航片配准的过程。 01数据情况 本文选用的示范数据为2020年7月中左右无人机拍摄的河北省某地系列照片,经过拼接得到CG...

QGISClass的博客 5249

Seesaw v2网络连接跟踪:nf_conntrack_ipv4内核模块应用指南

在Linux负载均衡领域,Seesaw v2作为基于Linux虚拟服务器(LVS)的强大负载均衡平台,其核心功能依赖于nf_conntrack_ipv4内核模块来实现高效连接跟踪。本文将深入探讨这一关键模块的应用原理和配置方法。 ## 什么是nf_conntrack_ipv4内核模块?🤔 nf_conntrack_ipv4是Linux内核中网络连接跟踪系统的IPv4实现模块。在Seesaw负

gitblog_00094的博客 794

ICC2:使用analyze_lib_cell_placement检查lib cell的pass rate

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?在place之前需要使analyze_lib_cell_placement命令去检查lib cell在当前的site row/power plan/legalize设置的环境下能够正常place和legalize。下面分享一个脚本去报告pass rate低于2%的lib cell。

m0_61544122的博客 675

nf_conntrack:table full 引发的问题

转自:https://blog.youkuaiyun.com/yanggd1987/article/details/54924725 最近由于网站流量异常,经排查网站日志发现有大量的恶意访问,导致/var/log/messages日志报错“nf_conntrack:table full,drop packet”。 究其原因:nf_conntrack是一个内核模块,用于跟踪一个连接状态。连接跟踪状态可以供其他...

天行健,君子以自强不息 579

nvidia系列教程-AGX-Orin基础环境搭建

NVIDIA Jetson AGX Orin 是一款功能强大的嵌入式AI平台,专为需要高性能和低功耗的边缘计算应用设计。无论是自动驾驶、机器人,还是智能监控系统,Jetson AGX Orin 都能为这些应用提供强大的计算能力。本篇博客将为大家详细介绍如何在AGX Orin(32GB)上搭建基础开发环境,包括系统安装、CUDA和cuDNN的配置等,帮助你快速上手这个强大的平台。架构: 搭载 56 个 Tensor Core 的 1792 核 NVIDIA Ampere c GPUCUDA Cores。

flypig has a dream! 2799

详解AXI4-Lite接口(3)--AXI4-Lite接口IP源码仿真及分析(Master接口)

通过本文您会学到:1、了解AXI4-Lite_Master接口的逻辑实现;2、加深Xilinx IP、仿真工具的使用;3、提高阅读时序图的能力。

孤独的单刀 6447

nf_conntrack模块开机不自动加载

你当然可以通过手动modprobe的方式来加载模块,或者在/etc/modules中配置上开机加载的模块,但这也只是解决了表像问题,深入的问题还是可能导致你后续的使用中遇到阻碍。iptables的配置是很重要的一个根源,需要添加以下规则重启iptables,会是nf_conntrack模块自动加载,并且为你之后的iptables连接限制铺平道路。同样说明nf_conntrack模块没有被加载,导致sysctl参数不能正确配置。发现没有加载nf_conntrack模块的情况。查看系统日志发现如下信息。

神棍之路 1612

近五年体内微/纳米机器人赋能肿瘤精准治疗综述:以 GBM 为重点

摘要 微/纳米机器人在实体瘤治疗领域展现出突破性潜力,通过主动运动能力解决传统纳米药物递送效率低、渗透不足等核心问题。2021-2025年间形成三条技术路线:1) 磁驱、声驱等运动增强递送实现深层渗透;2) 与免疫治疗融合实现原位免疫唤醒;3) 针对胶质母细胞瘤开发跨屏障递送系统。研究重点从单一运动性能转向"运动-分布-疗效"的系统评价,需建立标准化指标评估运动学参数、肿瘤分布均匀性和安全性。未来挑战在于临床转化的可制造性、闭环操控及生物相容性优化,特别是对血脑屏障穿透等复杂场景的系统集

AllenLV的博客 5204

浅析 /proc/net/nf_conntrack 文件(转)

/proc/net/nf_contrack 是连接跟踪文件,它里面的内容由 nf_conntrack.ko 模块写入。在 iptables 中使用 -m state 选项时,iptables 不但加载 xt_state.ko 模块,且 nf_conntrack.ko 模块也会被加载进来。一般而言,xt_state.ko 和 nf_conntrack.ko 这两个模块在许多 Linux 发行版里是默...

weixin_33816946的博客 2239

【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1058

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

连接跟踪子系统之初始化

这篇笔记记录了连接跟踪子系统框架部分的初始化过程,涉及的核心代码文件有: 代码路径 说明 net/netfilter/nf_conntrack_standalone.c 连接跟踪子系统的启动文件 net/netfilter/nf_conntrack_core.c 连接跟踪子系统框架的核心实现 初始化入口:nf_conntrack_standalone_init() stat...

九天小哥的专栏 698

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

linux 网络错误 nf_conntrack: table full, dropping packet. 路由跟踪表满

“连接跟踪表已满,开始丢包”!相信不少用iptables的同学都会见过这个错误信息吧,这个问题曾经也困扰过我好长一段时间。此问题的解决办法有四种(nf_conntrack 在CentOS 5 / kernel <= 2.6.19中名为 ip_conntrack ): 一、关闭防火墙。 简单粗暴,直接有效 chkconfig iptables off chkconfig ip6tab...

whatday的专栏 1338

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

连接跟踪nf_conntrack_tcp_loose设置

nf_conntrack_tcp_loose选项如果设置为0,对于未完成三次握手的流,内核连接跟踪模块将不会为其创建conntrack结构。反之,值为0的话,将为任意收到的tcp报文创建conntrack结构。默认值为一,如下可通过proc文件nf_conntrack_tcp_loose,获取其当前值。 $ sudo modprobe nf_conntrack_ipv4 ...

redwingz的博客 2594

nf_conntrack

nf_conntrack(在老版本的 Linux 内核中叫 ip_conntrack)是一个内核模块,用于跟踪一个连接的状态的。连接状态跟踪可以供其他模块使用,最常见的两个使用场景是 iptables 的 nat 的 state 模块。 iptables 的 nat 通过规则来修改目的/源地址,但光修改地址不行,我们还需要能让回来的包能路由到最初的来源主机。这就需要借助 nf_conntrack 来找到原来那个连接的记录才行。而 state 模块则是直接使用 nf_conntrack 里记录的连接的状态来匹

砚墨 7492

运维排查篇 | Linux 连接跟踪表满了怎么处理

Linux 连接跟踪表满怎么处理

s_alted的博客 1482

ip conntrack 基本原理与实现

1. 数据包分片处理 在netfilter框架下,各个hook点上的hook函数是以一定的优先级挂在一个链表上的,优先级排序是由高到底 module_init(nf_defrag_init); module_exit(nf_defrag_fini);

zhonglinzhang 9685
上一篇: ELK部署参考文档
下一篇: 修改tcp内核参数:somaxconn
王树民
博客等级 码龄10年 912粉丝 560原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值