Jump to content



All Activity

This stream auto-updates     

  1. Today
  2. Yesterday
  3. Last week
  4. vpngate.net 的镜像站点列表 (更新于 2019-09-13 13:04:02 UTC): http://107.172.136.106:57816/cn/ (Mirror location: United States) http://139.180.207.20:12433/cn/ (Mirror location: United States) http://38.117.105.189:8856/cn/ (Mirror location: Canada) http://37.120.154.37:23010/cn/ (Mirror location: United Kingdom) http://103.201.129.18:40254/cn/ (Mirror location: Japan) http://91.207.174.26:10967/cn/ (Mirror location: United Kingdom) VPN Gate 源 (主) 网站 URL https://www.vpngate.net/
  5. Earlier
  6. vpngate.net 的镜像站点列表 (更新于 2019-09-04 16:36:48 UTC): http://107.172.136.106:57816/cn/ (Mirror location: United States) http://static-183118.flx.com.pe:63412/cn/ (Mirror location: Peru) http://139.180.207.20:12433/cn/ (Mirror location: United States) http://38.117.105.189:8856/cn/ (Mirror location: Canada) http://37.120.154.37:23010/cn/ (Mirror location: United Kingdom) http://106.247.65.132:2994/cn/ (Mirror location: Korea Republic of) VPN Gate 源 (主) 网站 URL https://www.vpngate.net/
  7. vpngate.net 的镜像站点列表 (更新于 2019-08-29 16:51:40 UTC): http://107.172.136.106:57816/cn/ (Mirror location: United States) http://95.183.48.124:20893/cn/ (Mirror location: Switzerland) http://static-183118.flx.com.pe:63412/cn/ (Mirror location: Peru) http://139.180.207.20:12433/cn/ (Mirror location: United States) http://mo110-163-134-174.fix.mopera.net:20969/cn/ (Mirror location: Japan) http://38.117.105.189:8856/cn/ (Mirror location: Canada) VPN Gate 源 (主) 网站 URL https://www.vpngate.net/
    Navicat 系列是管理数据库最佳的应用软件
  8. 查看文件 IPS Community Suite(IPS 社区套件)最新版 IPS Community Suite(IPS 社区套件)最新版 ips-community-suite-4.4.4-nulled 中文版演示: https://bbs.huacool.cn 提交作者 IBMx345 提交日期 2019年07月21日 分类目录 程序代码(CODE)  
  9. 查看文件 OpenVPN 安装程序 - I607 - for Windows 10 / Windows 7 简介 VPN直译就是虚拟专用网络(Virtual Private Network),是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN是一个用于创建虚拟专用网络加密通道的免费开源软件。 原理 OpenVpn的技术核心是虚拟网卡,虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡。服务器端和客户端之间利用虚拟网卡搭建一个独立于当前网络环境的加密通道,将服务器端和多个客户端组建成一个独立的虚拟局域网,从而实现服务器端和客户端、客户端和客户端之间的相互通信。 如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。 安装 双击安装程序,按照提示进行安装,在下图这步的时候需要手动勾选OpenVPN RSA ,然后再下一步,直到完成安装。如果中途询问是否安装TAP-Win32驱动程序时,请选择「仍然继续」 配置 OpenVPN的配置工作主要分为如下两步: 第1步,创建加密证书和私钥,其中包括服务器端和客户端都要用到的核心CA证书和私钥,服务器端自身的加密证书(即公钥)和私钥,以及每个客户端对应的加密证书和私钥。 第2步,为服务器和客户端编写对应的配置文件,然后将其与第一步中生成的相应证书、私钥放在OpenVPN安装目录的config文件夹下。 OpenVPN支持基于加密证书的双向认证。在OpenVPN中,不管是服务器还是客户端,所有的证书和私钥都需要由服务器端生成,客户端要先获得服务器端分配给它的加密证书和密钥才能成功连接。 提交作者 IBMx345 提交日期 2019年08月22日 分类目录 应用软件(SOFTWARE)  
  10. Version v2.4.7

    0 downloads

    简介 VPN直译就是虚拟专用网络(Virtual Private Network),是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN是一个用于创建虚拟专用网络加密通道的免费开源软件。 原理 OpenVpn的技术核心是虚拟网卡,虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡。服务器端和客户端之间利用虚拟网卡搭建一个独立于当前网络环境的加密通道,将服务器端和多个客户端组建成一个独立的虚拟局域网,从而实现服务器端和客户端、客户端和客户端之间的相互通信。 如果用户访问一个远程的虚拟地址(属于虚拟网卡配用的地址系列,区别于真实地址),则操作系统会通过路由机制将数据包(TUN模式)或数据帧(TAP模式)发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。 安装 双击安装程序,按照提示进行安装,在下图这步的时候需要手动勾选OpenVPN RSA ,然后再下一步,直到完成安装。如果中途询问是否安装TAP-Win32驱动程序时,请选择「仍然继续」 配置 OpenVPN的配置工作主要分为如下两步: 第1步,创建加密证书和私钥,其中包括服务器端和客户端都要用到的核心CA证书和私钥,服务器端自身的加密证书(即公钥)和私钥,以及每个客户端对应的加密证书和私钥。 第2步,为服务器和客户端编写对应的配置文件,然后将其与第一步中生成的相应证书、私钥放在OpenVPN安装目录的config文件夹下。 OpenVPN支持基于加密证书的双向认证。在OpenVPN中,不管是服务器还是客户端,所有的证书和私钥都需要由服务器端生成,客户端要先获得服务器端分配给它的加密证书和密钥才能成功连接。
  11. 查看文件 Navicat Premium v12.x Keygen Patch By DFoX Navicat_Keygen_Patch_v5.0_By_DFoX.exe SHA-256 Sum Exe : C4637D7147987C012F7178D6EB211A90A294482F00E8C490DF72DE2266C6BC4A 提交作者 IBMx345 提交日期 2019年08月22日 分类目录 破解补丁(KEYGEN & PATCH)  
  12. 查看文件 Adobe CC 2019 Win 软件破解补丁工具 GenP 【资源介绍】 由国外团队制作的一款软件破解补丁工具 GenP,专破Win系统上的Adobe CC 2019 软件;安装好软件后,使用这款破解工具可破解你所使用的软件。 目前可以破解的Win软件: Adobe Acrobat DC 19.x (universal amtlib) Adobe After Effects CC 2019 v16.1.1 Adobe Animate CC 2019 v19.2 Adobe Audition CC 2019 v12.1 Adobe Bridge CC 2019 v9.0.3 Adobe Character Animator CC 2019 v2.1 Adobe Dimension CC v2.2.1 (universal amtlib) 更新 Adobe Dreamweaver CC 2019 v19.1 Adobe Illustrator CC 2019 v23.0.3 Adobe InCopy CC 2019 v14.0.2 Adobe Indesign CC 2019 v14.0.2 Adobe Lightroom CC v2.3 更新 Adobe Lightroom Classic CC v8.3 更新 Adobe Media Encoder CC 2019 v13.1 Adobe Photoshop CC 2019 v20.0.4 Adobe Prelude CC 2019 v8.1 Adobe Premiere Pro CC 2019 v13.1.2 Adobe XD v19.0.22.9 更新 提交作者 IBMx345 提交日期 2019年08月22日 分类目录 破解补丁(KEYGEN & PATCH)  
  13. 查看文件 SoftEther VPN Client SoftEther VPN Client 2019.07.07-build-9680.144670 VPN Gate 综述 VPN Gate 学术实验项目是一个在线服务,由日本国立筑波大学研究生院为学术研究目的运营。本研究的目的是推广 "全球分布式公共 VPN 中继服务器" 的知识。 VPN Gate 公共 VPN 中继服务器 在 VPN Gate 学术项目网站上有一个公共 VPN 中继服务器列表。互联网上的任何人都可以建立 VPN 连接至任一列表上的 VPN 服务器。无需用户注册。 VPN Gate 公共 VPN 中继服务器的特点 VPN Gate 包括许多由世界各地的志愿者所提供的 VPN 服务器。 您可以提供自己的电脑作为一个 VPN 服务器加入到这个实验中。 Windows, Mac, iPhone, iPad 和安卓都可以连接到 VPN Gate 服务器。 支持 SSL-VPN (SoftEther VPN) 协议, L2TP/IPsec 协议, OpenVPN 协议和 Microsoft SSTP 协议。 接受匿名连接。无需用户注册。 每个 VPN 服务器的 IP 地址是不固定的。 IP 地址可能会不定期改变。 每天 VPN 服务器会有增加和减少。因此,所有 VPN 服务器不处于特定 IP 地址范围。 当一个 VPN 客户端连接到 VPN 服务器时, VPN 客户端可以通过那台 VPN 服务器访问互联网。您可以隐藏你的客户端的 IP 地址。 当您使用一个在物理上位于海外国家的 VPN 服务器,您的任何通信都被认为,好像是从该国发起的。然后你就可以通过使用 VPN Gate 访问网站了,这通常是无法从您所在的国家访问的。 提交作者 IBMx345 提交日期 2019年07月12日 分类目录 应用软件(SOFTWARE)  
  14. Version v10.x

    0 downloads

    GoodSync是一种简单和可靠的文件备份和文件同步软件。它会自动分析、同步,并备份您的电子邮件、珍贵的家庭照片、联系人,、MP3歌曲,财务文件和其他重要文件本地-之间的台式机,笔记本电脑,服务器,外部驱动器,以及Windows Mobile设备,以及通过FTP远程,网友的WebDAV等等。 再也不会遗失您的电子邮件,照片, MP3等.. GoodSync文件同步软件结合防弹可靠性与一个极其简单易用的界面比较,同步和备份您的电子邮件,联系人,照片时, iTunes , MP3和其他重要文件。 1.自动同步或备份多种设备 自动同步和备份您的重要文件之间的台式机,笔记本电脑,服务器和外部驱动器通过网络或互联网。 用创新的同步算法-GoodSync文件同步软件是今后几年的包时,文件同步。 2.轻松和自动。 让您的文件备份和最新的一次点击,消除信息混乱,而且最重要的开始享受您的安心 ,知道您的财务文件,工作文件,电子邮件,联系人,照片时, iTunes , MP3和其他数据同步和备份。
  15. 查看文件 GoodSync for Windows v10.x crack GoodSync是一种简单和可靠的文件备份和文件同步软件。它会自动分析、同步,并备份您的电子邮件、珍贵的家庭照片、联系人,、MP3歌曲,财务文件和其他重要文件本地-之间的台式机,笔记本电脑,服务器,外部驱动器,以及Windows Mobile设备,以及通过FTP远程,网友的WebDAV等等。 再也不会遗失您的电子邮件,照片, MP3等.. GoodSync文件同步软件结合防弹可靠性与一个极其简单易用的界面比较,同步和备份您的电子邮件,联系人,照片时, iTunes , MP3和其他重要文件。 1.自动同步或备份多种设备 自动同步和备份您的重要文件之间的台式机,笔记本电脑,服务器和外部驱动器通过网络或互联网。 用创新的同步算法-GoodSync文件同步软件是今后几年的包时,文件同步。 2.轻松和自动。 让您的文件备份和最新的一次点击,消除信息混乱,而且最重要的开始享受您的安心 ,知道您的财务文件,工作文件,电子邮件,联系人,照片时, iTunes , MP3和其他数据同步和备份。 提交作者 IBMx345 提交日期 2019年08月22日 分类目录 破解补丁(KEYGEN & PATCH)  
  16. Version v5.0

    0 downloads

    Navicat_Keygen_Patch_v5.0_By_DFoX.exe SHA-256 Sum Exe : C4637D7147987C012F7178D6EB211A90A294482F00E8C490DF72DE2266C6BC4A
  17. Version v1.5.6.2

    1 download

    【资源介绍】 由国外团队制作的一款软件破解补丁工具 GenP,专破Win系统上的Adobe CC 2019 软件;安装好软件后,使用这款破解工具可破解你所使用的软件。 目前可以破解的Win软件: Adobe Acrobat DC 19.x (universal amtlib) Adobe After Effects CC 2019 v16.1.1 Adobe Animate CC 2019 v19.2 Adobe Audition CC 2019 v12.1 Adobe Bridge CC 2019 v9.0.3 Adobe Character Animator CC 2019 v2.1 Adobe Dimension CC v2.2.1 (universal amtlib) 更新 Adobe Dreamweaver CC 2019 v19.1 Adobe Illustrator CC 2019 v23.0.3 Adobe InCopy CC 2019 v14.0.2 Adobe Indesign CC 2019 v14.0.2 Adobe Lightroom CC v2.3 更新 Adobe Lightroom Classic CC v8.3 更新 Adobe Media Encoder CC 2019 v13.1 Adobe Photoshop CC 2019 v20.0.4 Adobe Prelude CC 2019 v8.1 Adobe Premiere Pro CC 2019 v13.1.2 Adobe XD v19.0.22.9 更新
  18. 【资源介绍】 由国外团队制作的一款软件破解补丁工具 GenP,专破Win系统上的Adobe CC 2019 软件;安装好软件后,使用这款破解工具可破解你所使用的软件。 目前可以破解的Win软件: Adobe Acrobat DC 19.x (universal amtlib) Adobe After Effects CC 2019 v16.1.1 Adobe Animate CC 2019 v19.2 Adobe Audition CC 2019 v12.1 Adobe Bridge CC 2019 v9.0.3 Adobe Character Animator CC 2019 v2.1 Adobe Dimension CC v2.2.1 (universal amtlib) 更新 Adobe Dreamweaver CC 2019 v19.1 Adobe Illustrator CC 2019 v23.0.3 Adobe InCopy CC 2019 v14.0.2 Adobe Indesign CC 2019 v14.0.2 Adobe Lightroom CC v2.3 更新 Adobe Lightroom Classic CC v8.3 更新 Adobe Media Encoder CC 2019 v13.1 Adobe Photoshop CC 2019 v20.0.4 Adobe Prelude CC 2019 v8.1 Adobe Premiere Pro CC 2019 v13.1.2 Adobe XD v19.0.22.9 更新 破解器的使用: 1.安装Adobe Creative Cloud桌面工具在线下载软件 (Adobe桌面工具下载地址: 城通网盘下载 百度网盘下载) 2.使用破解工具破解软件(使用方法在压缩包内) 3.完成破解,打开软件使用 【下载地址】 Adobe CC 2019 Win 软件破解补丁工具 GenP v1.5.6.2 城通网盘下载 百度网盘下载 提取码:dk1y
  19. vpngate.net 的镜像站点列表 (更新于 2019-08-18 17:20:45 UTC): http://37.120.154.37:23010/cn/ (Mirror location: United Kingdom) http://185.210.217.34:57406/cn/ (Mirror location: United Kingdom) http://200.2.166.122:6137/cn/ (Mirror location: Suriname) http://95.183.48.124:20893/cn/ (Mirror location: Switzerland) http://45.76.99.181:12433/cn/ (Mirror location: United States) http://184.82.96.45:42378/cn/ (Mirror location: Thailand)
  20. vpngate.net 的镜像站点列表 (更新于 2019-08-14 17:00:34 UTC): http://37.120.154.37:23010/cn/ (Mirror location: United Kingdom) http://200.2.166.122:6137/cn/ (Mirror location: Suriname) http://185.210.217.34:57406/cn/ (Mirror location: United Kingdom) http://95.183.48.124:20893/cn/ (Mirror location: Switzerland) http://45.76.99.181:12433/cn/ (Mirror location: United States) http://mo110-163-134-174.fix.mopera.net:20969/cn/ (Mirror location: Japan)
  21. Chrome 离线安装包下载 Windows x64 版本 / 稳定版(Stable) 最新版本:75.0.3770.100 文件大小:54.35 MB 更新时间:20天前 SHA1:1E3CED892F70AE5152A4C4135DD81BFBE2563B83 SHA256:2B6AA004F7476A5832B52DD72750705C0358D67C404C62CF36024CAD94413E35 下载地址 http://redirector.gvt1.com/edgedl/release2/chrome/AIQ1DKKlk7qg_75.0.3770.100/75.0.3770.100_chrome_installer.exe https://redirector.gvt1.com/edgedl/release2/chrome/AIQ1DKKlk7qg_75.0.3770.100/75.0.3770.100_chrome_installer.exe http://dl.google.com/release2/chrome/AIQ1DKKlk7qg_75.0.3770.100/75.0.3770.100_chrome_installer.exe https://dl.google.com/release2/chrome/AIQ1DKKlk7qg_75.0.3770.100/75.0.3770.100_chrome_installer.exe http://www.google.com/dl/release2/chrome/AIQ1DKKlk7qg_75.0.3770.100/75.0.3770.100_chrome_installer.exe https://www.google.com/dl/release2/chrome/AIQ1DKKlk7qg_75.0.3770.100/75.0.3770.100_chrome_installer.exe Windows x64 版本 / 测试版(Beta) 最新版本:76.0.3809.46 文件大小:53.58 MB 更新时间:12天前 SHA1:8196F4432EEBC6B7E5946B918D47A42E6FF77F49 SHA256:AA6701BA50F94FBAF9B149F9C27979DAC604AF3D3D79555963BFC937C1B2AB81 下载地址 http://redirector.gvt1.com/edgedl/release2/chrome/eid9nELLxKM_76.0.3809.46/76.0.3809.46_chrome_installer.exe https://redirector.gvt1.com/edgedl/release2/chrome/eid9nELLxKM_76.0.3809.46/76.0.3809.46_chrome_installer.exe http://dl.google.com/release2/chrome/eid9nELLxKM_76.0.3809.46/76.0.3809.46_chrome_installer.exe https://dl.google.com/release2/chrome/eid9nELLxKM_76.0.3809.46/76.0.3809.46_chrome_installer.exe http://www.google.com/dl/release2/chrome/eid9nELLxKM_76.0.3809.46/76.0.3809.46_chrome_installer.exe https://www.google.com/dl/release2/chrome/eid9nELLxKM_76.0.3809.46/76.0.3809.46_chrome_installer.exe Windows x64 版本 / 开发版(Dev) 最新版本:77.0.3833.0 文件大小:53.49 MB 更新时间:14天前 SHA1:A1F641F1385C97F2E3361F924D3BAEBE2FB308C9 SHA256:54840C1ED136E5BC18FFDDEEDB539CB0A5CBC2B35191271976DC2E61116E6980 下载地址 http://redirector.gvt1.com/edgedl/release2/chrome/AP3DqsyiihsL_77.0.3833.0/77.0.3833.0_chrome_installer.exe https://redirector.gvt1.com/edgedl/release2/chrome/AP3DqsyiihsL_77.0.3833.0/77.0.3833.0_chrome_installer.exe http://dl.google.com/release2/chrome/AP3DqsyiihsL_77.0.3833.0/77.0.3833.0_chrome_installer.exe https://dl.google.com/release2/chrome/AP3DqsyiihsL_77.0.3833.0/77.0.3833.0_chrome_installer.exe http://www.google.com/dl/release2/chrome/AP3DqsyiihsL_77.0.3833.0/77.0.3833.0_chrome_installer.exe https://www.google.com/dl/release2/chrome/AP3DqsyiihsL_77.0.3833.0/77.0.3833.0_chrome_installer.exe Windows x64 版本 / 金丝雀版(Canary) 最新版本:77.0.3848.0 文件大小:53.6 MB 更新时间:11小时前 SHA1:EB74F883B9FAC6DE8A62DDD8E3B0A82003C5CE59 SHA256:A561F28CEFDB8E5C46DC3E5002FD8BE1D851B6A5DF6BCF6623B4BAFAFED9E468 下载地址 http://redirector.gvt1.com/edgedl/release2/chrome/BqSmMPMxtzM_77.0.3848.0/77.0.3848.0_chrome_installer.exe https://redirector.gvt1.com/edgedl/release2/chrome/BqSmMPMxtzM_77.0.3848.0/77.0.3848.0_chrome_installer.exe http://dl.google.com/release2/chrome/BqSmMPMxtzM_77.0.3848.0/77.0.3848.0_chrome_installer.exe https://dl.google.com/release2/chrome/BqSmMPMxtzM_77.0.3848.0/77.0.3848.0_chrome_installer.exe http://www.google.com/dl/release2/chrome/BqSmMPMxtzM_77.0.3848.0/77.0.3848.0_chrome_installer.exe https://www.google.com/dl/release2/chrome/BqSmMPMxtzM_77.0.3848.0/77.0.3848.0_chrome_installer.exe OS X 版本 / 稳定版(Stable) 最新版本:77.0.3847.0 文件大小:78.28 MB 更新时间:1天前 SHA1:68243675AB6C0DCEC24A14927229EE26226D73F9 SHA256:7B417EB2882591326B2E5961F877E42CDEE7F61CDDFA58A2413DD0A907CA0CD5 下载地址 http://redirector.gvt1.com/edgedl/release2/chrome/AIq05b_mYHU7_77.0.3847.0/GoogleChromeCanary-77.0.3847.0.dmg https://redirector.gvt1.com/edgedl/release2/chrome/AIq05b_mYHU7_77.0.3847.0/GoogleChromeCanary-77.0.3847.0.dmg http://dl.google.com/release2/chrome/AIq05b_mYHU7_77.0.3847.0/GoogleChromeCanary-77.0.3847.0.dmg https://dl.google.com/release2/chrome/AIq05b_mYHU7_77.0.3847.0/GoogleChromeCanary-77.0.3847.0.dmg http://www.google.com/dl/release2/chrome/AIq05b_mYHU7_77.0.3847.0/GoogleChromeCanary-77.0.3847.0.dmg https://www.google.com/dl/release2/chrome/AIq05b_mYHU7_77.0.3847.0/GoogleChromeCanary-77.0.3847.0.dmg
  22. Fail2Ban还有很多的玩法,多研究/etc/fail2ban/filter.d目录里的过滤规则配置文件,结合举一反三可以实现不少实用的拦截规则。 重新梳理了一下服务器端的安全防御策略发现 Fail2Ban 真的是简单、方便、高效的一个提高安全防御的选择,Fail2Ban 的原理就是用正则匹配日志文件,然后操作 iptables,所以理论上一切能写日志的应用都可以用 Fail2Ban 来生成规则并加以保护。 配置监狱 也就是 Fail2Ban 的监控模块,其实默认配置中就已经写好了很多配置,当然我们需要手动来启动它们。 cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local Fail2Ban 会自动读取 .local 文件的配置,然后再增量地读取 conf 配置,这样就避免了更新它时你辛辛苦苦写好的配置被覆盖掉了。 然后我们就来编辑 Fail2Ban 的配置 vim /etc/fail2ban/jail.local 首先是在 [DEFAULT] 字段下,我们可以改变一些行为参数,比如这样修改(多余的没有提到的配置就保留默认,不要理会即可): bantime = 3600 #默认是 10 分钟,这个是说要 ban 多久,我们改长一点 #下面这两个是说在多长时间内失败多少次就被屏蔽, #比如这个是在 3600 秒内失败 6 次就被屏蔽 findtime = 3600 maxretry = 6 接下来就是添加我们的监狱配置了,默认配置信息中并没有内置 Nginx ,只有 Apache: [nginx-http-auth] # HTTP 验证防暴力破解 enabled = true filter = nginx-http-auth port = http,https logpath = /var/log/nginx/error.log [nginx-badbots] #屏蔽恶意爬虫 enabled = true port = http,https filter = nginx-badbots logpath = /var/log/nginx/access.log maxretry = 2 [nginx-nohome] #避免恶意请求网站目录结构 enabled = true port = http,https filter = nginx-nohome logpath = /var/log/nginx/access.log maxretry = 2 [nginx-noproxy] #避免 nginx 被他人用于反向代理 enabled = true port = http,https filter = nginx-noproxy logpath = /var/log/nginx/access.log maxretry = 2 [wp-login] #防范 WordPress 暴力破解登录请求 enabled = true port = http,https filter = wp-login maxretry = 10 findtime = 60 bantime = 43600 logpath = /var/log/nginx/access.log [xmlrpc] #防止 WordPress 受到 xmlrpc.php CC 攻击 enabled = true port = http,https filter = xmlrpc logpath = /var/log/nginx/access.log bantime = 43600 maxretry = 1 findtime = 5 注意这里的配置都是基于 Nginx 的日志的,所以你必须要允许 Nginx 记录日志,有些管理员为了性能考量会关闭日志,这样我们这篇文章也就失去了意义。 上述配置中 logpath 是指日志文件的路径的(如:/var/log/nginx/access.log),需要注意的是这里可以指定多个日志文件的,具体格式如下: logpath = /home/wwwlogs/access.log /home/wwwlogs/www.1111.com.log /home/wwwlogs/www.2222.tech.log /home/wwwlogs/service.3333.com.log /home/wwwlogs/eat.4444.com.log 每个日志文件需要回车换行(空格直接去掉了,所以可以放心用空格对齐)才能识别到哦! 为监狱配置规则 设置好了要启用的监狱,接下来就是给监狱创建规则了: cd /etc/fail2ban/filter.d 在这个目录下,存放这所有规则文件,一个配置名一个文件,有多少个文件就有多少个规则,这些规则被上文中监狱配置里 filter 字段调用。 vim nginx-http-auth.conf 这个规则是存在的,我们在规则中加一行配置,来过滤除了账号密码错误外,空白账号或者密码的错误: [Definition] failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: , server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$ ^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: , server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$ ignoreregex = 添加的是加粗的那一行。 cp apache-badbots.conf nginx-badbots.conf 过滤爬虫的规则是有现成的,所以我们只需要改个名就可以了; vim nginx-nohome.conf 这是过滤获取目录的: [Definition] failregex = ^ -.*GET .*/~.* ignoreregex = vim nginx-noproxy.conf 这是过滤反代的: [Definition] failregex = ^ -.*GET http.* ignoreregex = vim xmlrpc.conf 这是防止 WordPress 受到 xmlrpc.php 请求的 CC 攻击: [Definition] failregex = ^ .*POST .*xmlrpc\.php.* ignoreregex = vim wp-login.conf 防范 WordPress 暴力破解登录请求 [Definition] failregex = ^ -.* /wp-login.php.* HTTP/1\.." ignoreregex = 确认生效 做完上述配置之后,就可以重启 fail2ban 了 service fail2ban restart 这时你可以通过命令 fail2ban-client status 来查看,不出意外,应该类似这样: fail2ban-client status Status |- Number of jail: 7 `- Jail list: nginx-badbots, nginx-http-auth, nginx-nohome, nginx-noproxy, sshd, wp-login, xmlrpc 至此,Fail2Ban 保护 Nginx、WordPress 基本算是完成了,至少明月目前需要的安全策略都完成了,平时可以观察一下 Fail2Ban 的日志文件来观察 Fail2Ban 的防御效果,如: tail -f /var/log/fail2ban.log 如上图所示,IP 地址 193.201.224.220,14.13.135.161,218.92.139.149,90.181.101.224 都触发了 Fail2Ban 的【wp-login】监狱规则并被 Fail2Ban 捕获到了。 在通过查看 iptables 防火墙的拦截 iptables --list -n 上图的结果中 IP 地址 193.201.224.220 因为一定时间(5 秒)请求次数达到设定的值而被 iptables 防火墙给屏蔽了,屏蔽的时间是 43600 秒。 Fail2Ban 还有很多的玩法,多研究/etc/fail2ban/filter.d 目录里的过滤规则配置文件,结合举一反三可以实现不少实用的拦截规则,明月后期也会经常分析自己研究实践出来的使用规则分享给大家,请大家持续关注本博客【运维日志】栏目的更新哦!
  23. 很多站长搞不清楚 DDoS 和 CC 攻击的区别,今天就给大家简单的讲解一下 DDoS 和 CC 攻击的原理以及区别,随后明月会结合自己多年来运维经验给大家分享一下应对 DDoS 和 CC 攻击的措施和心得,希望可以帮助到大家。 DDoS 攻击的原理是什么 DDoS 全称:分布式拒绝服务(DDoS:Distributed Denial of Service)。 信息安全的三要素——“保密性”、“完整性”和“可用性”中,拒绝服务攻击,针对的目标正是“可用性”。该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。 拒绝服务攻击问题一直得不到合理的解决,目前还是世界性难题,究其原因是因为这是由于网络协议本身的安全缺陷造成的,(这里不细说,详情自行百度)从而拒绝服务攻击也成为了攻击者的终极手法。攻击者进行拒绝服务攻击,实际上让服务器实现两种效果: 一是迫使服务器的缓冲区满,不接收新的请求; 二是使用 IP 欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。 CC 攻击的原理是什么 CC 攻击全称 Challenge Collapsar,中文意思是挑战黑洞,因为以前的抵抗 DDoS 攻击的安全设备叫黑洞,顾名思义挑战黑洞就是说黑洞拿这种攻击没办法,新一代的抗 DDoS 设备已经改名为 ADS(Anti-DDoS System),基本上已经可以完美的抵御 CC 攻击了。CC 攻击的原理是通过代理服务器或者大量肉鸡模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标 CPU 资源,造成拒绝服务。CC 不像 DDoS 可以用硬件防火墙来过滤攻击,CC 攻击本身的请求就是正常的请求。我们都知道网站的页面有静态和动态之分,动态网页是需要与后台数据库进行交互的,比如一些论坛用户登录的时候需要去数据库查询你的等级、权限等等,当你留言的时候又需要查询权限、同步数据等等,这就消耗很多 CPU 资源,造成静态网页能打开,但是需要和数据库交互的动态网页打开慢或者无法打开的现象。这种攻击方式相对于前两种实现要相对复杂一些,但是防御起来要简单的多,提供服务的企业只要尽量少用动态网页并且让一些操作提供验证码就能抵御一般的 CC 攻击。 DDoS 和 CC 的区别 DDoS 攻击打的是网站的服务器,而 CC 攻击是针对网站的页面攻击的,用术语来说就是,一个是 WEB 网络层拒绝服务攻击(DDoS),一个是 WEB 应用层拒绝服务攻击(CC),网络层就是利用肉鸡的流量去攻击目标网站的服务器,针对比较本源的东西去攻击,服务器瘫痪了,那么运行在服务器上的网站肯定也不能正常访问了。而应用层就是我们用户看得到的东西,就比如说网页,CC 攻击就是针对网页来攻击的,CC 攻击本身是正常请求,网站动态页面的正常请求也会和数据库进行交互的,当这种"正常请求"达到一种程度的时候,服务器就会响应不过来,从而崩溃。 现在 CC 攻击基本和 DDOS 一样泛滥了。在防护上,确实有着不小的难度. 一般来说,CC 攻击有一些特征可以发现,比如肉鸡的访问频率通常会快于正常的速度,但防御不能这么光凭访问频率来做粗暴的封禁,因为这里面涉及到业务本身的特点等等,一不留神就很容易有误报。目前业界的主流做法一般是 cookie 验证、验证码提交等等方式。但这种常见防护方法,对付一些老手,已经是应付不来了。 比如一些黑客,会利用 WordPress 等一些插件的漏洞在一些大的站点 A 上埋下对目标站点 B 的访问,这样每一台访问 A 站点的机器就自动成了肉鸡对 B 发起访问请求。这种攻击倒也有解,因为这类的请求可能 referer 或者 UA 可能比较固定,站点 B 可以利用这个特征做防护过滤。 又比如有一些坏小子,会专门去研究你的业务哪些 URL 最消耗性能,集中一批肉鸡专打这种 URL,那这个时候其实可以重点对这些 URL 做防护。 最难的是利用海量肉鸡对站点进行慢速的访问攻击。这种攻击没有任何攻击特征,访问速度也相对平缓,访问的 URL 可能也会比较分散。这时候能应对的,我想就是各家厂商自身平时积累的 IP 信誉库以及威胁情报能力了。 CC 防护思路目前来看,资源以及多样的防护算法,缺一不可。首先你的资源要足够多,不然一下子打过来,别说对请求做各种分析了,直接就打瘫了,这也是决定为什么我们小老百姓自己做防护不现实的原因……,谁有那么多资本去为了可能存在的海量攻击预备机器资源?其次,CC 一直是一个攻防博弈的过程,到目前来看,很难做到全自动化的防护并且还零误杀,这就要求你有足够的防护能力能应对各种不同场景下的攻击,根据特征选出合适的解法。 CC 攻击防御策略 1.取消域名绑定 取消域名绑定后 Web 服务器的 CPU 能够马上恢复正常状态,通过 IP 进行访问连接一切正常。但是不足之处也很明显,取消或者更改域名对于别人的访问带来了不变,另外,对于针对 IP 的 CC 攻击它是无效的,就算更换域名攻击者发现之后,攻击者也会对新域名实施攻击。 2.更改 Web 端口 一般情况下 Web 服务器通过 80 端口对外提供服务,因此攻击者实施攻击就以默认的 80 端口进行攻击,所以,可以修改 Web 端口达到防 CC 攻击的目的。 3.屏蔽 IP 我们通过命令或在查看日志发现了 CC 攻击的源 IP,就可以在防火墙中设置屏蔽该 IP 对 Web 站点的访问,从而达到防范 CC 攻击的目的。 CC 攻击的防范手段 1.优化代码 尽可能使用缓存来存储重复的查询内容,减少重复的数据查询资源开销。减少复杂框架的调用,减少不必要的数据请求和处理逻辑。程序执行中,及时释放资源,比如及时关闭 mysql 连接,及时关闭 memcache 连接等,减少空连接消耗。 2.限制手段 对一些负载较高的程序增加前置条件判断,可行的判断方法如下: 必须具有网站签发的 session 信息才可以使用(可简单阻止程序发起的集中请求);必须具有正确的 referer(可有效防止嵌入式代码的攻击);禁止一些客户端类型的请求(比如一些典型的不良蜘蛛特征);同一 session 多少秒内只能执行一次。 3.完善日志 尽可能完整保留访问日志。日志分析程序,能够尽快判断出异常访问,比如单一 ip 密集访问;比如特定 url 同比请求激增。 上述的防御策略和防范手段仅供参考,基本上当 DDoS 或者 CC 攻击来临的时候我们能做的工作很少,明月认为更多的是预防措施是否准备完善,手里时刻准备几个有 WAF 功能的 CDN 账户是很有必要的,最经济的方法就是借助 CDN 的节点请求验证码来应急还是很不错的,HTTP 站点推荐百度云 CDN(CloudFlare 的技术框架还是很给力的),HTTPS 站点推荐上海云盾 CDN。这两个 CDN 可以说是免费 CDN 里比较有用的了,所以明月非常建议大家提前注册并实名认证这两个 CDN,一旦有需要可以随时 DNS 解析里 CNAME 过去,再结合服务器层面的防火墙基本上可以阻挡大部分“练手型”的 DDoS 或者 CC 攻击了。
  24. 正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。 但很神奇的是:无论你大学选择哪一门计算机语言,都没有关于正则表达式的课程给你修,在你学会正则之前,你只能看着那些正则大师们,写了一串外星文似的字符串,替代了你用一大篇幅的if else代码来做一些数据校验。 既然喜欢,那就动手学呗,可当你百度出一一堆相关资料时,你发现无一不例外的枯燥至极,难以学习。 本文旨在用最通俗的语言讲述最枯燥的基本知识! 正则基础知识点: 1.元字符 万物皆有缘,正则也是如此,元字符是构造正则表达式的一种基本元素。 我们先来记几个常用的元字符: 有了元字符之后,我们就可以利用这些元字符来写一些简单的正则表达式了, 比如: 匹配有abc开头的字符串: \babc或者^abc 匹配8位数字的QQ号码: ^\d\d\d\d\d\d\d\d$ 匹配1开头11位数字的手机号码: ^1\d\d\d\d\d\d\d\d\d\d$ 2. 重复限定符 有了元字符就可以写不少的正则表达式了,但细心的你们可能会发现:别人写的正则简洁明了,而不理君写的正则一堆乱七八糟而且重复的元字符组成的。正则没提供办法处理这些重复的元字符吗? 答案是有的! 为了处理这些重复问题,正则表达式中一些重复限定符,把重复部分用合适的限定符替代,下面我们来看一些限定符: 有了这些限定符之后,我们就可以对之前的正则表达式进行改造了,比如: 匹配8位数字的QQ号码: ^\d{8}$ 匹配1开头11位数字的手机号码: ^1\d{10}$ 匹配银行卡号是14~18位的数字: ^\d{14,18}$ 匹配以a开头的,0个或多个b结尾的字符串 ^ab*$ 3. 分组 从上面的例子(4)中看到,限定符是作用在与他左边最近的一个字符,那么问题来了,如果我想要ab同时被限定那怎么办呢? 正则表达式中用小括号()来做分组,也就是括号中的内容作为一个整体。 因此当我们要匹配多个ab时,我们可以这样 如:匹配字符串中包含0到多个ab开头: ^(ab)* 4. 转义 我们看到正则表达式用小括号来做分组,那么问题来了: 针对这种情况,正则提供了转义的方式,也就是要把这些元字符、限定符或者关键字转义成普通的字符,做法很简答,就是在要转义的字符前面加个斜杠,也就是即可。 如:要匹配以(ab)开头: ^(\(ab\))* 5. 条件或 回到我们刚才的手机号匹配,我们都知道:国内号码都来自三大网,它们都有属于自己的号段,比如联通有130/131/132/155/156/185/186/145/176等号段,假如让我们匹配一个联通的号码,那按照我们目前所学到的正则,应该无从下手的,因为这里包含了一些并列的条件,也就是“或”,那么在正则中是如何表示“或”的呢? 那么我们就可以用或条件来处理这个问题 ^(130|131|132|155|156|185|186|145|176)\d{8}$ 6. 区间 看到上面的例子,是不是看到有什么规律?是不是还有一种想要简化的冲动? 实际是有的 限定0到9 可以写成[0-9] 限定A-Z 写成[A-Z] 限定某些数字 [165] 那上面的正则我们还改成这样: ^((13[0-2])|(15[56])|(18[5-6])|145|176)\d{8}$ 好了,正则表达式的基本用法就讲到这里了,其实它还有非常多的知识点以及元字符,我们在此只列举了部分元字符和语法来讲,旨在给那些不懂正则或者想学正则但有看不下去文档的人做一个快速入门级的教程,看完本教程,即使你不能写出高大上的正则,至少也能写一些简单的正则或者看得懂别人写的正则了。 正则进阶知识点: 1. 零宽断言 断言:俗话的断言就是“我断定什么什么”,而正则中的断言,就是说正则可以指明在指定的内容的前面或后面会出现满足指定规则的内容,意思正则也可以像人类那样断定什么什么,比如"ss1aa2bb3",正则可以用断言找出aa2前面有bb3,也可以找出aa2后面有ss1. 零宽:就是没有宽度,在正则中,断言只是匹配位置,不占字符,也就是说,匹配结果里是不会返回断言本身。 意思是讲明白了,那他有什么用呢? 我们来举个栗子: 假设我们要用爬虫抓取csdn里的文章阅读量。通过查看源代码可以看到文章阅读量这个内容是这样的结构 "<span class="read-count">阅读数:641</span>" 其中也就‘641’这个是变量,也就是说不同文章不同的值,当我们拿到这个字符串时,需要获得这里边的‘641’有很多种办法,但如果正则应该怎么匹配呢? 下面先来讲几种类型的断言: 正向先行断言(正前瞻): 语法:(?=pattern) 作用:匹配pattern表达式的前面内容,不返回本身。 这样子说,还是一脸懵逼,好吧,回归刚才那个栗子,要取到阅读量,在正则表达式中就意味着要能匹配到‘’前面的数字内容 按照上所说的正向先行断言可以匹配表达式前面的内容,那意思就是:(?=) 就可以匹配到前面的内容了。 匹配什么内容呢?如果要所有内容那就是: String reg=".+(?=</span>)"; String test = "<span class=\"read-count\">阅读数:641</span>"; Pattern pattern = Pattern.compile(reg); Matcher mc= pattern.matcher(test); while(mc.find()){ System.out.println("匹配结果:") System.out.println(mc.group()); } //匹配结果: //<span class="read-count">阅读数:641 可是老哥我们要的只是前面的数字呀,那也简单咯,匹配数字 d,那可以改成: String reg="\\d+(?=</span>)"; String test = "<span class=\"read-count\">阅读数:641</span>"; Pattern pattern = Pattern.compile(reg); Matcher mc= pattern.matcher(test); while(mc.find()){ System.out.println(mc.group()); } //匹配结果: //641 大功告成! 正向后行断言(正后顾) 语法:(?<=pattern) 作用:匹配pattern表达式的后面的内容,不返回本身。 有先行就有后行,先行是匹配前面的内容,那后行就是匹配后面的内容啦。 上面的栗子,我们也可以用后行断言来处理. //(?<=<span class="read-count">阅读数:)\d+ String reg="(?<=<span class=\"read-count\">阅读数:)\\d+"; String test = "<span class=\"read-count\">阅读数:641</span>"; Pattern pattern = Pattern.compile(reg); Matcher mc= pattern.matcher(test); while(mc.find()){ System.out.println(mc.group()); } //匹配结果: //641 就这么简单。 负向先行断言(负前瞻) 语法:(?!pattern) 作用:匹配非pattern表达式的前面内容,不返回本身。 有正向也有负向,负向在这里其实就是非的意思。 举个栗子:比如有一句 “我爱祖国,我是祖国的花朵” 现在要找到不是'的花朵'前面的祖国 用正则就可以这样写: 祖国(?!的花朵) 负向后行断言(负后顾) 语法:(?<!pattern) 作用:匹配非pattern表达式的后面内容,不返回本身。 2.捕获和非捕获 单纯说到捕获,他的意思是匹配表达式,但捕获通常和分组联系在一起,也就是“捕获组” 而根据命名方式的不同,又可以分为两种组: 数字编号捕获组: 语法:(exp) 解释:从表达式左侧开始,每出现一个左括号和它对应的右括号之间的内容为一个分组,在分组中,第0组为整个表达式,第一组开始为分组。 比如固定电话的:020-85653333 他的正则表达式为:(0d{2})-(d{8}) 按照左括号的顺序,这个表达式有如下分组: 我们用Java来验证一下: String test = "020-85653333"; String reg="(0\\d{2})-(\\d{8})"; Pattern pattern = Pattern.compile(reg); Matcher mc= pattern.matcher(test); if(mc.find()){ System.out.println("分组的个数有:"+mc.groupCount()); for(int i=0;i<=mc.groupCount();i++){ System.out.println("第"+i+"个分组为:"+mc.group(i)); } } 输出结果: 分组的个数有:2 第0个分组为:020-85653333 第1个分组为:020 第2个分组为:85653333 可见,分组个数是2,但是因为第0个为整个表达式本身,因此也一起输出了。 命名编号捕获组: 语法:(?exp) 解释:分组的命名由表达式中的name指定 比如区号也可以这样写:(?0d{2})-(?d{8}) 按照左括号的顺序,这个表达式有如下分组: 用代码来验证一下: String test = "020-85653333"; String reg="(?<quhao>0\\d{2})-(?<haoma>\\d{8})"; Pattern pattern = Pattern.compile(reg); Matcher mc= pattern.matcher(test); if(mc.find()){ System.out.println("分组的个数有:"+mc.groupCount()); System.out.println(mc.group("quhao")); System.out.println(mc.group("haoma")); } 输出结果: 分组的个数有:2 分组名称为:quhao,匹配内容为:020 分组名称为:haoma,匹配内容为:85653333 非捕获组: 语法:(?:exp) 解释:和捕获组刚好相反,它用来标识那些不需要捕获的分组,说的通俗一点,就是你可以根据需要去保存你的分组。 比如上面的正则表达式,程序不需要用到第一个分组,那就可以这样写: (?:\0\d{2})-(\d{8}) 验证一下: String test = "020-85653333"; String reg="(?:0\\d{2})-(\\d{8})"; Pattern pattern = Pattern.compile(reg); Matcher mc= pattern.matcher(test); if(mc.find()){ System.out.println("分组的个数有:"+mc.groupCount()); for(int i=0;i<=mc.groupCount();i++){ System.out.println("第"+i+"个分组为:"+mc.group(i)); } } 输出结果: 分组的个数有:1 第0个分组为:020-85653333 第1个分组为:85653333 3. 反向引用 上面讲到捕获,我们知道:捕获会返回一个捕获组,这个分组是保存在内存中,不仅可以在正则表达式外部通过程序进行引用,也可以在正则表达式内部进行引用,这种引用方式就是反向引用。 根据捕获组的命名规则,反向引用可分为: 数字编号组反向引用:k或number 命名编号组反向引用:k或者'name' 好了 讲完了,懂吗?不懂!!! 可能连前面讲的捕获有什么用都还不懂吧? 其实只是看完捕获不懂不会用是很正常的! 因为捕获组通常是和反向引用一起使用的 上面说到捕获组是匹配子表达式的内容按序号或者命名保存起来以便使用 注意两个字眼:“内容” 和 “使用” 这里所说的“内容”,是匹配结果,而不是子表达式本身,强调这个有什么用?嗯,先记住 那这里所说的“使用”是怎样使用呢? 因为它的作用主要是用来查找一些重复的内容或者做替换指定字符。 还是举栗子吧: 比如要查找一串字母"aabbbbgbddesddfiid"里成对的字母 如果按照我们之前学到的正则,什么区间啊限定啊断言啊可能是办不到的, 现在我们先用程序思维理一下思路: 1)匹配到一个字母 2)匹配第下一个字母,检查是否和上一个字母是否一样 3)如果一样,则匹配成功,否则失败 这里的思路2中匹配下一个字母时,需要用到上一个字母,那怎么记住上一个字母呢??? 这下子捕获就有用处啦,我们可以利用捕获把上一个匹配成功的内容用来作为本次匹配的条件 好了,有思路就要实践 首先匹配一个字母:w 我们需要做成分组才能捕获,因此写成这样:(w) 那这个表达式就有一个捕获组:(w) 然后我们要用这个捕获组作为条件,那就可以:(w)1 这样就大功告成了 可能有人不明白了,1是什么意思呢? 还记得捕获组有两种命名方式吗,一种是是根据捕获分组顺序命名,一种是自定义命名来作为捕获组的命名 在默认情况下都是以数字来命名,而且数字命名的顺序是从1开始的 因此要引用第一个捕获组,根据反向引用的数字命名规则 就需要 k<1>或者1 当然,通常都是是后者。 我们来测试一下: String test = "aabbbbgbddesddfiid"; Pattern pattern = Pattern.compile("(\\w)\\1"); Matcher mc= pattern.matcher(test); while(mc.find()){ System.out.println(mc.group()); } 输出结果: aa bb bb dd dd ii 嗯,这就是我们想要的了。 在举个替换的例子,假如想要把字符串中abc换成a String test = "abcbbabcbcgbddesddfiid"; String reg="(a)(b)c"; System.out.println(test.replaceAll(reg, "$1"));; 输出结果: abbabcgbddesddfiid 4. 贪婪和非贪婪 1.贪婪 我们都知道,贪婪就是不满足,尽可能多的要。 在正则中,贪婪也是差不多的意思: 前面我们讲过重复限定符,其实这些限定符就是贪婪量词,比如表达式: \d{3,6} 用来匹配3到6位数字,在这种情况下,它是一种贪婪模式的匹配,也就是假如字符串里有6个个数字可以匹配,那它就是全部匹配到。 如 String reg="\\d{3,6}"; String test="61762828 176 2991 871"; System.out.println("文本:"+test); System.out.println("贪婪模式:"+reg); Pattern p1 =Pattern.compile(reg); Matcher m1 = p1.matcher(test); while(m1.find()){ System.out.println("匹配结果:"+m1.group(0)); } 输出结果: 文本:61762828 176 2991 44 871 贪婪模式:\d{3,6} 匹配结果:617628 匹配结果:176 匹配结果:2991 匹配结果:871 由结果可见:本来字符串中的“61762828”这一段,其实只需要出现3个(617)就已经匹配成功了的,但是他并不满足,而是匹配到了最大能匹配的字符,也就是6个。 一个量词就如此贪婪了, 那有人会问,如果多个贪婪量词凑在一起,那他们是如何支配自己的匹配权的呢? 是这样的,多个贪婪在一起时,如果字符串能满足他们各自最大程度的匹配时,就互不干扰,但如果不能满足时,会根据深度优先原则,也就是从左到右的每一个贪婪量词,优先最大数量的满足,剩余再分配下一个量词匹配。 String reg="(\\d{1,2})(\\d{3,4})"; String test="61762828 176 2991 87321"; System.out.println("文本:"+test); System.out.println("贪婪模式:"+reg); Pattern p1 =Pattern.compile(reg); Matcher m1 = p1.matcher(test); while(m1.find()){ System.out.println("匹配结果:"+m1.group(0)); } 输出结果: 文本:61762828 176 2991 87321 贪婪模式:(\d{1,2})(\d{3,4}) 匹配结果:617628 匹配结果:2991 匹配结果:87321 “617628” 是前面的d{1,2}匹配出了61,后面的匹配出了7628 "2991" 是前面的d{1,2}匹配出了29 ,后面的匹配出了91 "87321"是前面的d{1,2}匹配出了87,后面的匹配出了321 懒惰(非贪婪) 懒惰匹配:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能少的字符,这匹配方式叫做懒惰匹配。 特性:从左到右,从字符串的最左边开始匹配,每次试图不读入字符匹配,匹配成功,则完成匹配,否则读入一个字符再匹配,依此循环(读入字符、匹配)直到匹配成功或者把字符串的字符匹配完为止。 懒惰量词是在贪婪量词后面加个“?” String reg="(\\d{1,2}?)(\\d{3,4})"; String test="61762828 176 2991 87321"; System.out.println("文本:"+test); System.out.println("贪婪模式:"+reg); Pattern p1 =Pattern.compile(reg); Matcher m1 = p1.matcher(test); while(m1.find()){ System.out.println("匹配结果:"+m1.group(0)); } 输出结果: 文本:61762828 176 2991 87321 贪婪模式:(\d{1,2}?)(\d{3,4}) 匹配结果:61762 匹配结果:2991 匹配结果:87321 解答: “61762” 是左边的懒惰匹配出6,右边的贪婪匹配出1762 "2991" 是左边的懒惰匹配出2,右边的贪婪匹配出991 "87321" 左边的懒惰匹配出8,右边的贪婪匹配出7321 5. 反义 前面说到元字符的都是要匹配什么什么,当然如果你想反着来,不想匹配某些字符,正则也提供了一些常用的反义元字符: 正则进阶知识就讲到这里,正则是一门博大精深的语言,其实学会它的一些语法和知识点还算不太难,但想要做到真正学以致用能写出非常6的正则,还有很远的距离,只有真正对它感兴趣的,并且经常研究和使用它,才会渐渐的理解它的博大精深之处,我就带你们走到这,剩下的,靠自己啦。
  1. Load more activity
×
×
  • Create New...