设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 3213|回复: 3

Kangle访问控制模块Wiki文档 帮助手册

[复制链接]
 成长值: 249

签到天数: 4708 天

[LV.Master]伴坛终老

发表于 2021/1/31 22:52 | 显示全部楼层 |阅读模式 |Google Chrome 88.0.4324.104|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
很多人吐槽kangle没文档?自己不看官网没注意到,还是不愿意去学文档
1.png


      kangle web服务器( 简称:kangle ) 是一款跨平台、功能强大、安全稳定、易操作的高性能web服务器和反向代理服务器软件。
除此:kangle也是一款专为做虚拟主机研发的web服务器。实现虚拟主机独立进程、独立身份运行。用户之间安全隔离,一个用户出问题不影响其他用户。安全支持php、asp、asp.net、java、ruby等多种动态开发语言。

       发布的chm用户帮助手册内含kangle、easypanel、vhms、反向代理等详细说明介绍。同时内附软件的许多使用操作教程。
       因为kangle的功能非常强大、灵活、操作也极方便,还有很多功能没有写出具体的操作教程,后续会陆续增加上来。同时欢迎朋友们在使用过程中,把操作过程写成教程分享到论坛^_^
顺便发一份手册:https://github.com/1265578519/kangle/blob/master/kangle%E4%B8%AD%E6%96%87%E5%B8%AE%E5%8A%A9%E6%89%8B%E5%86%8Chelp_chm.rar


以下内容转自官方Wiki文档

模块分类
kangle访问控制模块,按功能分为匹配模块和标记模块,按位置分为请求控制模块和回应控制模块。匹配模块只用来匹配相关数据,而不修改,标记模块就有可能修改,或特殊目的。

每个模块,都可以加上or='0|1' revers='0|1' 两个属性。
or表示和下一个模块是或的关系,默认是与(AND)的关系。(kangle 3.1.7开始支持)
revers表示逻辑反转,默认不反转。
请求控制匹配模块
url
说明:匹配用户url网址。网址可以使用正则表达式
范围: 请求控制和回应控制
语法:
<acl_url ><![CDATA[url地址]]></acl_url>
使用例子:
<acl_url ><![CDATA[www.test.com]]></acl_url>
reg_path
说明:匹配路径。可以使用正则表达式匹配路径
范围: 请求控制和回应控制
语法:
<acl_reg_path  path='路径' raw='原始的' nc='不区分大小写'></acl_reg_path>
使用例子:
<acl_reg_path  path='^/admin/'></acl_reg_path>
reg_param
说明:可用正则表达式进行url参数匹配
范围: 请求控制和回应控制
语法:
<acl_reg_param  param='url参数'></acl_reg_param>
使用例子:
<acl_reg_param  param='^http://www.kanglesoft.com/'></acl_reg_param>
path
说明:匹配路径
范围: 请求控制和回应控制
语法:
<acl_path  path='路径'></acl_path>
使用例子:
<acl_path  path='/admin/'></acl_path>
dst_port
说明:匹配目标端口
范围: 请求控制和回应控制
语法:
<acl_dst_port >端口</acl_dst_port>
使用例子:
<acl_dst_port >80</acl_dst_port>
meth
说明:匹配http请求方法(如get 、post)
范围: 请求控制和回应控制
语法:
<acl_meth >参数</acl_meth>
使用例子:
<acl_meth >GET</acl_meth>
file_ext
说明:匹配一个或多个文件扩展名
范围: 请求控制和回应控制
语法:
<acl_file_ext  split='|'>文件扩展名</acl_file_ext>
使用例子:
<acl_file_ext  split='|'>html|js|php</acl_file_ext>
host
说明:匹配一个或多个主机头
范围: 请求控制和回应控制
语法:
<acl_host  split='|'>主机头地址</acl_host>
使用例子:
<acl_host  split='|'>www.test.com|www.ttt.com</acl_host>
wide_host
说明:泛域名匹配
范围: 请求控制和回应控制
语法:
<acl_wide_host  v='域名1|域名2'></acl_wide_host>
使用例子:
<acl_wide_host  v='abc.com|*.abc.com'></acl_wide_host>
map_host
说明:匹配一个或多个主机头与“host”的区别:map_host是以文件形式来存放主机头进行匹配
范围: 请求控制和回应控制
语法:
<acl_map_host  file='文件名'></acl_map_host>
使用例子:
<acl_map_host  file='host.txt'></acl_map_host>
注:在文件中域名一行写一个

header
说明:匹配http头
范围:请求控制和回应控制
语法:
<acl_header header='http头' regex='1'><![CDATA[参数]]></acl_header>
使用例子:
<acl_header header='content-type' regex='1'><![CDATA[text/html]]></acl_header>
self
说明:匹配当前连接的服务器ip
范围:请求控制和回应控制
语法:
<acl_self >ip地址</acl_self>
使用例子:
<acl_self >192.168.1.203</acl_self>
selfs
说明:匹配多个本机ip地址
范围:请求控制和回应控制
语法:
<acl_selfs  split='|'>ip地址</acl_selfs>
使用例子:
<acl_selfs  split='|'>192.168.1.203|192.168.1.205</acl_selfs>
sefl_port
说明:匹配当前连接的服务器端口
范围:请求控制和回应控制
语法:
<acl_self_port >端口号</acl_self_port>
使用例子:
<acl_self_port >80</acl_self_port>
self_ports
说明:匹配多个本机端口
范围:请求控制和回应控制
语法:
<acl_self_ports  split='|'>端口号</acl_self_ports>
使用例子:
<acl_self_ports  split='|'>80|3320</acl_self_ports>
src
说明:匹配源地址(ip或者ip段)
范围:请求控制和回应控制
语法:
<acl_src >ip或ip段</acl_src>
使用例子:
<acl_src >203.168.1.0/24</acl_src>
srcs
说明:多ip段
范围:请求控制和回应控制
语法:
<acl_srcs  split='|'>ip段地址</acl_srcs>
使用例子:
<acl_srcs  split='|'>203.158.0.|203.168.1.</acl_srcs>
time
说明:匹配当前时间,格式为:“crontab”
范围:请求控制和回应控制
参数格式:
*  *   *  *  *
分 时 日 月 周
语法:
<acl_time  time='参数'></acl_time>
使用例子:
<acl_time  time='30 21 * * *'></acl_time>
例子表示每晚的21:30执行

ssl_serial
说明:匹配证书序列号
范围:请求控制和回应控制
语法:
<acl_ssl_serial  icase='1' split='|'>证书序列号</acl_ssl_serial>
使用例子:
<acl_ssl_serial  icase='1' split='|'>df48a548cef576bb4ae7a726b693842</acl_ssl_serial>
auth_user
说明:匹配http认证用户
范围:请求控制和回应控制
语法:
<acl_auth_user  split='|'>用户名1|用户名2</acl_auth_user>
例匹配用户名是usera和用户名为userb
<acl_auth_user  split='|>usera|userb</acl_auth_user>
referer
说明:url来源
范围:请求控制和回应控制
参数:
Null:匹配为空
NotNull:匹配不为空
EqHost:来源的域名和访问的域名相同
语法:
<acl_referer  referer='参数'></acl_referer>
使用例子:
<acl_referer  referer='NotNull'></acl_referer>
ip_rate
说明:ip访问频率
范围:请求控制和回应控制
语法:
<acl_ip_rate request='次数' second='时间单位秒'></acl_ip_rate>
使用例子:
<acl_ip_rate request='20' second='10'></acl_ip_rate>
设置匹配每ip10秒内可以访问20次

mark
说明:印记模块
范围:请求控制和回应控制
参数:
eq是等于
lt是小于
gt是大于
语法:
<acl_mark op='eq' v='参数'></acl_mark>
参数可以设置在0-255范围内,mark可以将请求控制和回应控制中的模块通过印记模块串连起来

使用例子:
<acl_mark op='eq' v='100'></acl_mark>
per_ip
说明:匹配每ip连接数
范围:请求控制和回应控制
语法:
<acl_per_ip  max='数值'></acl_per_ip>
使用例子:
<acl_per_ip  max='100'></acl_per_ip>
匹配每ip 100连接数

worker
说明:检测队列类型
范围:请求控制和回应控制
参数:
rq:请求队列
io:io队列
dns:dns工作数
语法:
<acl_worker  type='队列类型' max='达到匹配的设定参数就返回成功'></acl_worker>
使用例子:
<acl_worker  type='rq' max='20'></acl_worker>
请求控制标记模块
speed_limit
说明:单连接限速只针对当前连接
speed_limit模块使用方法请参考
gspeed_limit
说明:分组限速针对所有连接
gspeed_limit模块使用方法请参考
ip_speed_limit
说明:每ip限速,限速针对每ip
ip_speed_limit模块使用方法请参考
flag
说明:对用户请求作不缓存、不过滤内容及不防cc攻击标记
范围:请求控制
参数:
clear flag(clear):清除设置
不缓存(no_cache):不缓存
多节点忽略宕机切换(mserver_noswitch):勾选后多节点宕机不会自动切换
忽略网络错误(ignore_error):勾选后做多节点cdn源机出现问题,cdn节点仍可以访问
上流短连接(upstream_noka):上游使用短链接
原始url代理:(raw_proxy)
double_cache_expire:双倍过期时间
x_cache:插入x-cache
via:插入via
no_x_forwared_for:不插入x_forwared_for(如果没有勾选,默认是插入x_forwared_for)
x_real_ip: 插入真实ip
no_buffer: 不使用缓冲
语法:
<mark_flag  no_cache='参数' ></mark_flag>
使用例子:
<mark_flag  no_cache='1' ></mark_flag>
例子说明:不缓存

rewrite
说明:url重写
范围:请求控制
参数:
prefix:前缀
path:路径
rewrite to:重写到
code:状态码
internal:内部的
no case:忽略大小写
qsappend:附加的url参数
语法:
<mark_rewrite   path='路径' dst='重写到' internal='0' nc='1' qsa='1' code='重写代码'></mark_rewrite>
使用例子
<mark_rewrite   path='(.*)' dst='http://t.com$1' internal='0' nc='1' qsa='1' code='301'></mark_rewrite>
redirect
说明:url重定向
范围:请求控制
语法:
<mark_redirect   dst='重定向到的地址' internal='内部的' code='状态码'></mark_redirect>
使用例子:
<acl_host  split='|'>www.php22.com</acl_host>
<mark_redirect   dst='http://127.0.0.100/' internal='1' code='301'></mark_redirect>
auth
说明:http认证
范围:请求控制
参数:
file:文件名
crypt_type:加密类型
auth_type:论证类型
realm:一般使用默认的
require:验证使用的帐户名是否被允许使用kangle服务器
语法:
<mark_auth   file='文件名' crypt_type='加密类型' auth_type='论证类型' realm='kangle' require='*'></mark_auth>
使用例子:
<mark_auth   file='fly.txt' crypt_type='plain' auth_type='Basic' realm='kangle' require='*'></mark_auth>
host_rewrite
说明:主机重写
范围:请求控制
语法:
<mark_host_rewrite   reg_host='需重定向域名' host='www.php22.com' port='80' proxy='0或1(1是反代)' rewrite='0或1(1是重写)' life_time='生存时间'>
</mark_host_rewrite>
使用例子:
<mark_host_rewrite   reg_host='(.*)' host='www.php22.com' port='80' proxy='0' rewrite='1' life_time='0'></mark_host_rewrite>
本例是所有域名访问重定向到www.php22.com

anti_cc
说明:防CC模块
范围:请求控制
参数:
wl(white list):1代表勾选白名单,0表示不勾选白名单,白名单时间有效时间以你的设置为准,可在kangle--》配置--》资源限制--》白名单有效期
fix_url: 勾选后,如触发了防CC,在地址栏不会显示一串长长的字符,这样让地址栏显得更友好
skip_cache:勾选后,如果是缓存了的内容,就会跳过防CC规则
语法:
<mark_anti_cc   request='次数' second='时间/秒' wl='白名单'><![CDATA[防CC代码]]></mark_anti_cc>
使用例子:
<mark_anti_cc   request='20' second='10' wl='1'><![CDATA[HTTP/1.1 200 OK
  Content-Type: text/html; charset=utf-8
  Connection: close
<html><body><script language="javascript">window.location="{ {murl}}";</script></body></html>]]></mark_anti_cc>
注:{ {murl}}左右两边的大括号在写配置文件时中间不要有空格

extend_flag
说明:是否启用扩展卡
范围: 请求控制和回应控制
语法:
<mark_extend_flag   no_extend='参数'></mark_extend_flag>
使用例子:
<mark_extend_flag   no_extend='1'></mark_extend_flag>
勾选了无扩展,全部文件以源文件形式显示,(这个模块在回应控制中要添加在POSTMAP表里面,因为在回应控制的BEGIN表里面,数据已经产生所以没有效果。如果在回应控制里没有POSTMAP表可以手动添加这个表)

host
说明:主机头
范围:请求控制
参数:
host:主机头
port:端口
life_time:生存时间
rewrite:重写
语法:
<mark_host   host='主机头' port='端口号' proxy='反代'></mark_host>
使用例子:
<mark_host   host='test986.com' port='80' proxy='1'></mark_host>
replace_ip
说明:ip替换
范围:请求控制
语法:
<mark_replace_ip   header='参数'></mark_replace_ip>
使用例子:
<mark_replace_ip   header='X-Real-Ip'></mark_replace_ip>
param
说明:参数过滤
范围:请求控制
语法:
<mark_param   name='命名' value='需要过滤的参数' get='0或1'  post='0或1'  icase='0或1(1是忽略大小写)'  charset='编码'></mark_param>
使用例子:
<mark_param   name='name' value=''.*[; ]?((or)|(insert)|(select)|(union)|(update)|(delete)|(replace)|
(create)|(drop)|(alter)|(grant)|(load)|(show)|(exec))[\s(]' get='1'  post='1'  icase='1'  charset='utf-8'>
</mark_param>
本例是防SQL注入攻击

post_file
说明:上传文件过滤
范围:请求控制
语法:
<mark_post_file   filename='参数' icase='0或1(1是忽略大小写)'></mark_post_file>
使用例子:
<mark_post_file   filename='\.((php)|(htm)|(html))$' icase='1'></mark_post_file>
本例是防上传木马示例

mark
请参考请求控制匹配模块的mark模块
black_list
说明:插入到黑名单
范围:请求控制和回应控制
语法:
<mark_black_list  ></mark_black_list>
这个模块只要这样添加了就可以了

check_black_list
说明:检查黑名单
范围:请求控制
语法:
<mark_check_black_list  time_out='加入黑名单后限制时间'></mark_check_black_list>
使用例子:
<mark_check_black_list  time_out='1800'></mark_check_black_list>
是黑名单就拒绝 ,check_black_list模块一般加在black_list模块前面

flow
说明:流量统计
范围:请求控制和回应控制
参数:
reset:重置 (如果勾选了reset这个选项,重新点提交后,统计就会重新计算,此选项需要3311的flow访问控制模块里设置)
语法:
<mark_flow  flow='0' cache='0' ></mark_flow>
param_count
说明:防hash攻击
范围:请求控制和回应控制
语法:
<mark_param_count   get='1'  post='1'  max_count='允许的参数数量' ></mark_param_count>
使用例子:
<mark_param_count   get='1'  post='1'  max_count='1000' ></mark_param_count>
上例主要是防hash攻击,max_count=1000是最多允许的参数数量

path_sign
说明:签名防盗链
范围:请求控制
参数:
sign:签名
expire:有效期
key:密钥
说明:以上三个参数需要和您程序上的参数吻合才行
语法:
<mark_path_sign  sign='签名' expire='有效期' key='密钥'></mark_path_sign>
使用例子:
<mark_path_sign  sign='_KS' expire='_KE' key='dfsdfsdfse'></mark_path_sign>
remove_header
说明:删除http头
范围: 回应控制
语法:
<mark_remove_header   attr='属性' val='值' ></mark_remove_header>
使用例子:
<mark_remove_header   attr='http-header' val='text' ></mark_remove_header>
remove_param
说明:删除参数
范围:请求控制和回应控制
语法:
<mark_remove_param  params='参数' raw='原始的' nc='不区分大小写'></mark_remove_param>
使用例子:
<mark_remove_param  params='thread-1493962' raw='0' nc='1'></mark_remove_param>
self_ip
说明:指定出口ip
范围:请求控制
语法:
<mark_self_ip   ip='指定出口ip'></mark_self_ip>
使用例子:
<mark_self_ip   ip='192.168.1.20'></mark_self_ip>
反向代理时指定哪个ip连接源机,如果为空时进来哪个ip就哪个ip去连接

temp_file
说明:临时文件
范围:请求控制
语法:
<mark_temp_file   tf='0或1'></mark_temp_file>
使用例子:
<mark_temp_file   tf='1'></mark_temp_file>
1是on 表示使用临时文件, 0是off 表示使用内存缓存, 设置了这个模块就会忽略全局里的设置,优先使用这里

upload_progress
upload_progress模块使用方法请参考
url_rewrite
说明:url重写
范围:请求控制
语法:
<mark_url_rewrite  url='重写url' dst='url地址' icase='1(1是忽略大小写)'>
</mark_url_rewrite>
使用例子:
<mark_url_rewrite  url='http://www.php22.com/vhost/(.*)$' dst='http://www.php22.com/vhost/?c=session&a=loginForm' icase='1'>
</mark_url_rewrite>
kangle的url_rewrite重写带协议,比如是http的就在地址前面写上http

回应控制匹配模块
url
请参考请求控制匹配模块的url模块
reg_path
请参考请求控制匹配模块的reg_path模块
reg_param
请参考请求控制匹配模块的reg_param模块
path
请参考请求控制匹配模块的path模块
dst_port
请参考请求控制匹配模块的dst_port模块
meth
请参考请求控制匹配模块的meth模块
src
请参考请求控制匹配模块的src模块
srcs
请参考请求控制匹配模块的srcs模块
file_ext
请参考请求控制匹配模块的file_ext模块
host
请参考请求控制匹配模块的host模块
wide_host
请参考请求控制匹配模块的wide_host模块
map_host
请参考请求控制匹配模块的map_host模块
header
请参考请求控制匹配模块的header模块
self
请参考请求控制匹配模块的self模块
selfs
请参考请求控制匹配模块的selfs模块
sefl_port
请参考请求控制匹配模块的sefl_port模块
self_ports
请参考请求控制匹配模块的self_ports模块
file
说明:匹配一个或多个文件
范围:回应控制
语法:
<acl_file  split='|'>匹配文件</acl_file>
使用例子
<acl_file  split='|'>D:\project\eeee\test2\index.html</acl_file>
匹配的路径要写具体的路径,像reg_file可使用正则就不需要写具体的路径

filename
说明:匹配一个或多个文件名
范围:回应控制
语法:
<acl_filename  split='|'>匹配文件名</acl_filename>
使用例子:
<acl_filename  split='|'>index.html|test.php</acl_filename>
dir
说明:匹配多个目录下的文件。按目录匹配
范围:回应控制
语法:
<acl_dir  split='|'>匹配文件目录名</acl_dir>
使用例子:
<acl_dir  split='|'>D:\project\eeee\test2</acl_dir>
reg_file
说明:匹配一个或多个文件。可用正则表达式表示
范围:回应控制
语法:
<acl_reg_file  file='匹配文件'></acl_reg_file>
使用例子:
<acl_reg_file  file='(D:\\project\\eeee\\test2(.*))|D:\\project\\eeee\\test(.*)'></acl_reg_file>
上例是匹配test2和test这两个目录里的所有文件名

reg_filename
说明:匹配一个或多个文件名。可用正则表达式表示
范围:回应控制
语法:
<acl_reg_filename  filename='匹配文件名'></acl_reg_filename>
使用例子:
<acl_reg_filename  filename='(index\.html)|(php\.php)'></acl_reg_filename>
content_length
说明:配置内容大小
范围:回应控制
语法:
<acl_content_length  min='匹配内容起始大小' max='匹配内容最大大小' content_range='返回内容范围'></acl_content_length>
使用例子:
<acl_content_length  min='1' max='100K' content_range='1'></acl_content_length>
参数的单位是字节,也可以在参数后面写单位,上例中是对1字节到100K的内容大小进行匹配

mark
请参考请求控制匹配模块的mark模块
obj_flag
说明:检测网页的状态
范围:回应控制
语法:
<acl_obj_flag  flag='参数'></acl_obj_flag>
使用例子:
<acl_obj_flag  flag='nocache,'></acl_obj_flag>
上例意思是:检测回应里面是否有不允许缓存的标识

status_code
说明:状态码
范围:回应控制
参数:
eq是等于
lt是小于
gt是大于
语法:
<acl_status_code op='参数' code='状态码'></acl_status_code>
使用例子:
<acl_status_code op='gt' code='301'></acl_status_code>
worker
请参考请求控制匹配模块的worker模块
回应控制标记模块
cache_control
说明:缓存标记
范围: 回应控制
参数:
static:强制缓存静态化
last_modified: 当勾选static这个选项后,勾选last-modified才会有用,勾选后会生成一个last-modified的头给浏览器(就是最后修改时间)
soft: 勾选后就不会发送maxage给浏览器头
语法:
<mark_cache_control   max_age='设置时间' static='强制缓存静态化'></mark_cache_control>
使用例子:
<mark_cache_control   max_age='120' static='1'></mark_cache_control>
content  
说明:内容过滤(可以使用正则表达式进行内容过滤)
范围: 回应控制
语法:
<mark_content   charset='编码'><![CDATA[过滤的内容]]></mark_content>
使用例子:
<mark_content   charset='utf-8'><![CDATA[(html)|(网站控制面板)]]></mark_content>
response_flag
说明:对回应给用户的请求作标记
范围: 回应控制
参数:
nogzip: 不使用gzip压缩
gzip: 启用gzip压缩
nocache: 不缓存
cache: 缓存
nodiskcache: 不启用磁盘缓存
语法:
<mark_response_flag   flagvalue='参数'></mark_response_flag>
使用例子:
<mark_response_flag   flagvalue='gzip,'></mark_response_flag>
add_header
说明:增加自定义头
范围: 回应控制
语法:
<mark_add_header   attr='属性' val='参数'></mark_add_header>
使用例子:
<mark_add_header   attr='http-header' val='kangle'></mark_add_header>
remove_header
请参考请求控制标记模块的remove_header模块
replace_header
说明:替换http头(注:用于反代或cdn,替换源的http头)
范围: 回应控制
语法:
<mark_replace_header   attr='http头名' val='原始名' replace='替换后名'></mark_replace_header>
使用例子:
<mark_replace_header   attr='http-header' val='test' replace='test2'></mark_replace_header>
footer
说明:插入内容在前面或者后面
范围: 回应控制
参数:
head:插入内空在头部
replace: 选中后会替换页面的所有内容
语法:
<mark_footer  head='插入广告在头部'><![CDATA[插入的内容]]></mark_footer>
使用例子:
<mark_footer  head='1'><![CDATA[ad-test]]></mark_footer>
extend_flag
请参考请求控制标记模块的extend_flag模块
http_only
说明:防XSS跨站脚本攻击
范围: 回应控制
语法:
<mark_http_only   cookie='参数'></mark_http_only>
使用例子:
<mark_http_only   cookie='.'></mark_http_only>
.是匹配所有的cookie, 扩展阅读,案例说明. https://bbs.itzmx.com/thread-6018-1-1.html

mark
请参考请求控制匹配模块的mark模块
replace_content
说明:替换内容
范围: 回应控制
参数:
charset:编码
buffer:缓存大小
replaced_stop:勾选此选项后,含有替换内容的页面会被全部替换(注:replaced_stop选中后buffer选项才会生效)
语法:
<mark_replace_content   content='原始内容' replace='替换后内容'  charset='编码' buffer='缓存大小'></mark_replace_content>
使用例子:
<mark_replace_content   content='test' replace='php'  charset='utf-8' replaced_stop='1' buffer='1M'></mark_replace_content>


Wiki文档原文:
https://web.archive.org/web/20210103193239/https://wiki.kangleweb.com/%E9%A6%96%E9%A1%B5
https://web.archive.org/web/20210103193312/http://wiki.kangleweb.com/Easypanel
https://web.archive.org/web/20210103193239/https://wiki.kangleweb.com/kangle
https://web.archive.org/web/20200123064504/http://wiki.kangleweb.com/Kangle%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%A8%A1%E5%9D%97
https://web.archive.org/web/20161126221136/http://wiki.kanglesoft.com/%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E7%9B%AE%E6%A0%87

评分

参与人数 1樱币 +1 收起 理由
alp + 1 赞一个!

查看全部评分

欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 1164 天

[LV.10]以坛为家III

发表于 2021/2/1 01:55 | 显示全部楼层 |Google Chrome 88.0.4324.104|Windows 10
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 117 天

[LV.6]常住居民II

发表于 2022/5/23 18:05 | 显示全部楼层 |Google Chrome 81.0.4044.129|Windows 10
以前我也懒,但发现不主动实践,什么也学不来,所以还是要多学习
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 249

签到天数: 4708 天

[LV.Master]伴坛终老

发表于 2022/5/23 18:29 | 显示全部楼层 |Google Chrome 101.0.4951.64|Windows 10
method 发表于 2022/5/23 18:05
以前我也懒,但发现不主动实践,什么也学不来,所以还是要多学习

没办法,很多东西,人都不愿意去尝试
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/11/24 14:35 , Processed in 0.152507 second(s), 21 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表