• 什么是Tor?Tor浏览器更新有什么用?什么是Tor?Tor浏览器更新有什么用?
  • 难怪马斯克裁掉整个安全部门,推特540万用户数据在暗网公开难怪马斯克裁掉整个安全部门,推特540万用户数据在暗网公开
  • 中华人民共和国网络安全法中华人民共和国网络安全法
大横幅1
大横幅2
到期时间:永久 到期时间:推广
到期时间:推广 小横幅4
今日发布0 篇文章 | 本站共发布了1816篇文章
  • 樊雨熙,温柔的秋冬需要氛围感

    樊雨熙,温柔的秋冬需要氛围感  6p ...

    2023-11-01 福利分享 79
  • 如何在Ubuntu服务器22.04上设置静态IP地址

    在这篇文章中,我们将介绍如何在 Ubuntu 服务器 22.04 上设置静态 IP 地址。 强烈建议在 Linux 服务器上使用静态 IP,因为它会在重启后保持不变。静态 IP 对邮件服务器、Web 服务器和文件服务器等服务器起着重要作用。 准备条件 最小安装的 Ubuntu 服务器 22.04 具有 sudo 管理员权限的普通用户 在 Ubuntu 服务器 22.04 中,网络由 netplan 程序控制,因此我们将使用 netplan 在 Ubuntu 服务器上配置静态 IP 地址。 注意:我们不能使用 nmcli 程序,因为它不是 Ubuntu 服务器上默认安装的一部分。 在Ubuntu服务器22.04上设置静态IP地址 登录到你的 Ubuntu 服务器 22.04,查找 netplan 配置文件。它位于 /etc/netplan 目录下。 $ cd /etc/netplan/ $ ls -l total 4 -rw-r--r-- 1 root root 116 Oct 12 04:03 00-installer-config.yaml $ 运行以下 cat 命令以查看 00-installer-config.yaml 的内容。 注意:配置文件的名称可能因你的设置而异。由于它是一个 yaml 文件,因此请确保在编辑时保持缩进和语法。 $ cat 00-installer-config.yaml 输出: 根据上面的输出,它说我们有 ens33 接口,它正在从 DHCP 服务器获取 IP。查看接口名称的另一种方法是通过 ip 命令。 现在,要配置静态 IP 代替 DHCP,使用 vi 或 nano 编辑器编辑 netplan 配置文件并添加以下内容。 $ sudo vi 00-installer-config.yaml # This is the network config written by 'subiquity' network: renderer: networkd ethernets: ens33: addresses: - 192.168.1.247/24 nameservers: addresses: [4.2.2.2, 8.8.8.8] routes: - to: default via: 192.168.1.1 version: 2 保存并关闭文件。 在上面的文件中,我们使用了以下内容, ens33 为接口名称 用于设置静态 IP 的地址 nameservers 用于指定 DNS 服务器的 IP 用于指定默认网关的路由 注意:根据你的环境更改 IP 详细信息和接口名称。 要是上述修改生效,请使用以下 netplan 命令应用这些更改: $ sudo netplan apply 运行以下 IP 命令查看接口上的 IP 地址: $ ip addr show ens33 要查看默认路由,请运行: $ ip route show 上述命令的输出。 ip-addr-route-command-output-u buntu-server 完美,以上命令的输出确认静态 IP 和路由配置成功。 这就是这篇文章的全部内容。请在下面的评论部分发表你的问题和反馈。 ...

    2023-10-28 技术教程 93
  • 某博包臀裙大赛✨ ​​​

    点击围观  ...

    2023-10-28 福利分享 64
  • 号称植入了2000万设备的欺诈后门拓展分析

    事件概述 近日,奇安信威胁情报中心注意到外国安全厂商humansecurity在外网揭露了一个名为BADBOX的事件,其报告称观察到至少74000 部基于 Android 的手机、平板电脑、和全球联网电视盒有遭遇BADBOX 感染的迹象;而来自趋势科技的说法是该后门据信被植入了2000万数量级别的设备。实际上,humansecurity在其分析报告中已经对该事件进行了比较详细的技术分析,各位如果有兴趣可以自行查看。本篇文章中,我们主要想基于奇安信自身情报视野做一些关联扩展分析,希望能从我们的视角出发提供更多的补充信息给到业界。 分析细节 基于奇安信威胁情报中心的历史流量记录,可以看到humansecurity提供的几个C2地址在国内的感染量并不算少,以cbphe.com为例,可以看到cbphe.com22年到23年5月份基本上是每日访问情况比较平稳,从23年开始逐步增长,到了23年5月之后,感染量突然暴增,并一直持续到现在。 另外,我们发现域名flyermobi.com下有多个关联的样本,首先选一个样本进行定性分析,这里随机挑选了一个e6027f962eaaf7dede8a271166409fe6。 样本信息: MD5:e6027f962eaaf7dede8a271166409fe6 包名:com.gavv.tissm 样本会解密原包中/a/b.data 文件,释放jar,通过dexclassloader的方式加载 原包文件: 移动设备中释放的jar和dex 然后动态加载jar文件: 样本会将释放的jar的版本号(v)、设备型号(tp)、Android系统版本(bdr)、软件版本(rv)、包名(pk)等数据上传到解密出来的url中,对比返回版本信息,如果版本有更新则下载新的jar,从而实现版本更新。url如下: hxxp://adc[.]flyermobi[.]com/update/update.conf?bdr=xx&rv=x&v=xxx&pk=xxx&tp=Generic+Android-x86_64 解密字符串的部分: 解密算法: public class De {public static void main(String[] args) {System.out.println(dec("d62kyun6d", "C4FF3D0FF6730B4AE7BFA387C88862560050076610A3517E03BA599535DEAA943134CA7E20F8138A7D0331"));}public static String dec(String key,String msg){String v7_3 = "";byte[] v7_2;int v0 = 0;if (msg.length()>=2){String v7_1 = msg.toLowerCase();int v2 = v7_1.length() / 2;byte[] v3 = new byte[v2];while(v0 < v2) {int v4 = v0 * 2;v3[v0] = (byte)Integer.parseInt(v7_1.substring(v4, v4 + 2), 16);++v0;}v7_2 = v3;byte[] v6 = a(v7_2, key);try {v7_3 = new String(v6, "UTF-8");} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);}}return v7_3;}public static byte[] a(byte[] arg4, String arg5) {try {SecretKeySpec v5 = Sekey(arg5);Cipher v0 = Cipher.getInstance("AES/CFB/NoPadding");v0.init(2, v5, new IvParameterSpec(new byte[v0.getBlockSize()]));return v0.doFinal(arg4);}catch(Exception v4) {v4.printStackTrace();return null;}}private static SecretKeySpec Sekey(String arg2) {byte[] v2_1;if(arg2 == null) {arg2 = "";}StringBuilder v0 = new StringBuilder(0x20);while(true) {v0.append(arg2);if(v0.length() >= 0x20) {break;}arg2 = "0";}if(v0.length() > 0x20) {v0.setLength(0x20);}try {v2_1 = v0.toString().getBytes("UTF-8");}catch(UnsupportedEncodingException v2) {v2.printStackTrace();v2_1 = null;}return new SecretKeySpec(v2_1, "AES");}} 返回结果中包含下载地址,md5,版本号等内容: 释放的jar中,利用webview实现后台刷广告牟利的功能。广告地址通过访问url获取,利用MotionEvent实现自动点击广告。 访问url:http://adc.flyermobi.com/config/config.conf、http://adc.flyermobi.com/config/config.conf.default来获取广告相关url 利用webview请求广告: 通过MotionEvent实现广告点击: 分析到这里,可以确认这个样本行为与humansecurity提到的基本一致,该恶意程序是一个内置的后门,通过后门实际远程下载其他代码模块并加载的功能;目前看到的主要功能模块是用于后台点击广告来牟利。 接下来尝试对相关C2地址进行关联分析,首先将公开披露的这几个域名(cbphe.com 、cbpheback.com、ycxrl.com、dcylog.com、flyermobi.com;)输入到奇安信威胁情报中心的【威胁图谱分析】模块中,威胁图谱会自动将这几个域名的历史解析记录、whois、关联样本等等多种关联关系展示在画布上。 其中,我们注意到flyermobi.com这个域名有一个解析的IP 128.199.193.15,这个IP上还关联到了其他的域名,其中有一个apkcar.com的域名也解析到128.199.193.15这个IP上,并且其子域名ymex.apkcar.com、ymlog.apkcar.com的域名结构与前面的rnznd.ycxrl.com、z3rv.ycxrl.com(ycxrl.com的子域名)结构相似。 进一步下钻关联数据,可以看到ymsdk.apkcar.com曾经cname到adbsdk.flyermobi.com,并且扩展出来更多的子域名、URL和样本,如下图: 选择其中一个样本进行分析(MD5:f33401aaf64a2dd3ed14e6f441ac83ab),可以看到代码与前面分析的样本代码十分相似: 到这里,我们基本可以确定apkcar.com,是本次事件同一个团伙的域名,而这个域名在其他安全厂商的报告中都没有提到。我们通过奇安信威胁图谱关联的方式扩展出了一个之前没有被发现的新C2. 总结 经过上述分析,可以确认本次事件确有其事,攻击者通过在机顶盒内置后门的方式,利用后门远程下载并加载其他恶意代码模块;最后通过后台隐蔽点击广告来进行牟利。 IOC DOMAIN cbphe.com cbpheback.com ycxrl.com dcylog.com flyermobi.com apkcar.com URL hxxp://128[.]199.97.77/logs/log.active hxxp://adc[.]flyermobi.com/update/update.conf hxxp://ymsdk[.]apkcar.com/adbu MD5 e6027f962eaaf7dede8a271166409fe6 f33401aaf64a2dd3ed14e6f441ac83ab 参考链接 [1].https://humansecurity.com/hubfs/HUMAN_Report_BADBOX-and-PEACHPIT.pdf [2].https://arstechnica.com/security/2023/10/thousands-of-android-devices-come-with-unkillable-backdoor-preinstalled/ ...

    2023-10-28 技术教程 75
  • Linux Rsync命令的使用方法以及应用场景

    Rsync Rsync(Remote Sync)是一个用于文件同步和备份的开源工具。 它可以在本地系统之间或本地系统与远程系统之间同步文件和目录。 1.安装 在大多数常见的Linux发行版中,都没有默认安装rsync。 sudo apt-get install rsync sudo yum install rsync 2.使用场景 一些常见的使用场景包括: 文件备份:rsync可以用于定期备份文件和目录,只传输修改过的文件,节省带宽和存储空间。 文件同步:rsync可以用于将文件从一个位置同步到另一个位置,确保两个位置的文件保持一致。 远程备份:rsync可以通过SSH协议在本地和远程系统之间进行文件备份和同步。 文件发布:rsync可以用于将文件和目录发布到远程服务器,例如网站发布、软件发布等。 Rsync使用方法 rsync命令 是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。 rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 1.本地文件 将源目录同步到目标目录 $ rsync -r source destination 上面命令中,-r 表示递归,即包含子目录。注意,-r是必须的,否则 rsync 运行不会成功。 source 目录表示源目录,destination 表示目标目录。 多个文件或目录同步 $ rsync -r source1 source2 destination 上面命令中,source1、source2 都会被同步到 destination 目录。 -a 参数可以替代 -r,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。 由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以 -a 比 -r 更有用。 下面的用法才是常见的写法。 $ rsync -a source destination 目标目录 destination 如果不存在,rsync 会自动创建。 执行上面的命令后,源目录 source 被完整地复制到了目标目录 destination 下面,即形成了 destination/source 的目录结构。 如果只想同步源目录 source 里面的内容到目标目录 destination ,则需要在源目录后面加上斜杠。 $ rsync -a source/ destination 上面命令执行后,source 目录里面的内容,就都被复制到了 destination 目录里面,并不会在 destination 下面创建一个 source 子目录。 ...

    2023-10-25 技术教程 90
  • Overskride:一款有趣的Linux蓝牙应用!

    一款适用于 Linux 的新应用已经出现,它可能是满足你所有蓝牙需求的一站式应用。 这款名为 “Overskride” 的开源应用首次发布。尽管它还处于开发阶段,但已经提供了一些不错的功能。 请允许我带你看一下。 Overskride:可以期待什么? Overskride 将会吸引 Rust 爱好者,因为它主要是用 Rust 语言编写的,带有GTK4/libadwaita 风格。 根据开发人员的说法,它是一个简单的蓝牙和 Obex 客户端(未来计划),无论使用什么桌面环境或窗口管理器都可以工作。 一些主要功能包括: 信任/阻止设备。 能够发送/接收文件。 设置连接超时时间。 支持配置适配器。 查看上面的截图,你可以看到自定义蓝牙设备和连接的所有基本选项,包括适配器名称。 当然,考虑到这是该应用的第一次发布,人们不应该抱有太高的期望。因此,还有改进的空间。 以下是 Overskride 的一些预览,以查看它提供的功能。 我在 Ubuntu 22.04 LTS 和 GNOME 42.9 上使用提供的 Flatpak 包进行安装。在此安装上运行似乎没有任何问题。 Overskride 能够检测到我的智能手机,并提供多种配置选项。 你可以将设备添加到受信任列表或阻止列表、重命名并发送文件。 我尝试了文件传输功能,但在此之前,我必须使用Flatseal允许访问用户文件,以便它可以读取我系统上的文件。 我在手机上接受文件传输后,传输开始。速度还可以,文件确实完整地到达那里,没有任何问题。 我必须说,在其首次发布时,开发人员为我们提供了一个有用的实用程序。我很高兴看到其未来版本将提供什么样的改进。 一位 Reddit 用户 询问是否有任何计划支持显示无线耳机的电池百分比。对此,开发人员提到这样做很棘手,因为 每个设备都遵循不同的规范,这使得这一目标更难实现。 ...

    2023-10-25 值得一看 82
  • Java面试题:如何用Zookeeper实现分布式锁?

    Zookeeper是一个分布式协调服务,可以用来实现分布式锁的功能。 分布式锁是一种控制多个分布式系统之间同步访问共享资源的机制。 Zookeeper实现分布式锁的原理如下:   首先,需要在 Zookeeper 中创建一个持久节点作为锁的根节点,例如 /lock。 然后,每个需要获取锁的客户端都在 /lock 节点下创建一个临时顺序节点,例如 /lock/seq-0000000001。这样可以利用 Zookeeper 的节点唯一性和顺序性特性。 接着,每个客户端都获取 /lock 节点下的所有子节点,并按照序号排序,判断自己创建的节点是否是最小的。如果是,说明获取到了锁,可以执行相关操作。 如果不是最小的,说明没有获取到锁,需要等待。此时,客户端可以监听自己前一个节点的变化(例如删除),一旦监听到事件发生,就重新判断自己是否是最小的节点。 最后,当客户端执行完操作后,需要释放锁,即删除自己创建的临时顺序节点。这样,后面等待的客户端就可以收到通知,继续尝试获取锁。 以上就是 Zookeeper 实现分布式锁的基本原理。 实现方式: 实际开发过程中,可以 curator 工具包封装的API帮助我们实现分布式锁。 <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> </dependency> 1、客户端想要获取锁,就在 Zookeeper 上创建一个临时的、有序的节点,这个节点相当于一把锁。  2、客户端查看 Zookeeper 上所有的节点,按照顺序排列,看看自己创建的节点是不是最小的。  3、判断是否获得锁,如果是读操作,只要自己前面没有写操作的节点,就可以获取锁,然后开始执行读逻辑。如果是写操作,只有自己是最小的节点,才可以获取锁,然后开始执行写逻辑。  4、如果没有获取到锁,就要等待。如果是读操作,就监听自己前面最近的一个写操作的节点。如果是写操作,就监听自己前面最近的一个节点。一旦监听到这个节点被删除了,就重新判断是否可以获取锁。 Curator 的几种锁方案 : 1、InterProcessMutex:分布式可重入排它锁2、InterProcessSemaphoreMutex:分布式排它锁3、InterProcessReadWriteLock:分布式读写锁下面例子模拟 50 个线程使用重入排它锁 InterProcessMutex 同时争抢锁: 实例: public class InterprocessLock { public static void main(String[] args) { CuratorFramework zkClient = getZkClient(); String lockPath = "/lock"; //通过InterProcessMutex创建分布式锁 InterProcessMutex lock = new InterProcessMutex(zkClient, lockPath); //模拟50个线程抢锁 for (int i = 0; i < 50; i++) { new Thread(new TestThread(i, lock)).start(); } } static class TestThread implements Runnable { private Integer threadFlag; private InterProcessMutex lock; public TestThread(Integer threadFlag, InterProcessMutex lock) { this.threadFlag = threadFlag; this.lock = lock; } @Override public void run() { try { lock.acquire(); System.out.println("第"+threadFlag+"线程获取到了锁"); //等到1秒后释放锁 Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); }finally { try { lock.release(); } catch (Exception e) { e.printStackTrace(); } } } } private static CuratorFramework getZkClient() { String zkServerAddress = "127.0.0.1:2181"; ExponentialBackoffRetry retryPolicy = new ExponentialBackoffRetry(1000, 3, 5000); CuratorFramework zkClient = CuratorFrameworkFactory.builder() .connectString(zkServerAddress) .sessionTimeoutMs(5000) .connectionTimeoutMs(5000) .retryPolicy(retryPolicy) .build(); zkClient.start(); return zkClient; } } </div> ...

    2023-10-25 值得一看 66
  • java面试题:为什么JDK 15要废弃偏向锁?

    为什么JDK 15要废弃偏向锁? 要想说清楚这个问题,你得先知道什么是偏向锁,它是在哪里使用的。 这就不得不提到Synchronized的锁升级过程了。 在JDK 1.6及之前的版本中,Synchronized关键字,它可以让一个对象只能被一个线程使用,这样就可以避免多个线程同时修改同一个对象造成的混乱。 但是,这种方式也有一个缺点,就是每次一个线程要使用一个对象时,都要先检查这个对象是否被别的线程占用了,如果是的话,就要等待别的线程用完才能继续。 这个过程会消耗很多时间和资源,影响程序的效率。 为了解决这个问题,Java在后来的1.7 之后对 Synchronized 的实现做了一些改进,让它可以根据不同的情况,采用不同的方式来控制对象的使用。 具体来说,有四种方式: 无锁状态:这是最简单的一种方式,就是没有任何限制,任何线程都可以随时使用对象。 偏向锁状态:这是一种优化的方式,就是假设一个对象只会被一个线程使用,所以当第一个线程使用对象时,就会把自己的标记放在对象上,表示这个对象属于自己。这样,下次这个线程再使用对象时,就不用检查了,直接就可以用。但是如果有别的线程也想用这个对象,就要先把标记去掉,然后再竞争。 轻量级锁状态:这是一种折中的方式,就是当有多个线程想用同一个对象时,不会立刻让它们等待,而是先让它们在自己的内存里复制一份对象的信息,然后各自修改。最后再比较一下谁修改得最快,谁就可以用对象。这样可以减少等待的时间,提高效率。 重量级锁状态:这是最原始的一种方式,就是当有多个线程想用同一个对象时,只能让其中一个线程用,其他的线程都要等待。这样可以保证对象的安全性,但是会降低效率。 在Java中,每个对象都有一个特殊的区域叫做mark word(标记字),它可以记录对象的一些信息。其中有两位或三位是用来表示对象现在处于哪种状态的。具体来说: 如果两位是“01”,表示无锁状态或偏向锁状态。如果第三位是“0”,表示无锁状态; 如果第三位是“1”,表示偏向锁状态。如果两位是“00”,表示轻量级锁状态。 如果两位是“10”,表示重量级锁状态。 但是,在Java 15中 ,偏向锁被取消了 ,所以现在只有三种状态:无锁状态、轻量级锁状态和重量级锁状态。 回到最开始的问题:为什么JDK 15要废弃偏向锁? 取消偏向锁状态的原因是,偏向锁状态在现代的应用场景下已经不再有明显的性能优势,反而会增加虚拟机的复杂度和维护成本。 具体的原因是: 1. 偏向锁状态是一种优化技术,用于减少无竞争情况下的同步开销。 它假设一个对象只会被一个线程使用,所以当第一个线程使用对象时,就会把自己的标记放在对象上,表示这个对象属于自己。 这样,下次这个线程再使用对象时,就不用检查了,直接就可以用。 但是如果有别的线程也想用这个对象,就要先把标记去掉,然后再竞争。 2. 偏向锁状态在过去能够带来很大的性能提升,是因为有些应用会使用很多不必要的同步操作。 比如早期的Java集合类(如Hashtable和Vector),它们每次访问都要同步。 现在的应用一般会使用非同步的集合类(如HashMap和ArrayList)或者更高效的并发数据结构(如ConcurrentHashMap、CopyOnWriteArrayList等)来处理单线程或多线程的情况。 这意味着如果更新代码使用这些新的类,就可以获得更好的性能,而不需要依赖偏向锁状态。 3. 偏向锁状态也有一个缺点,就是当有竞争发生时,需要进行一次代价很高的撤销操作。 所以只有当应用有大量的无竞争的同步操作时,偏向锁状态才有优势。 但是随着硬件和软件的发展,原子操作的代价已经降低了很多,而且现在的应用往往使用线程池和工作队列来处理并发任务,这些场景下偏向锁状态反而会降低性能。 4. 偏向锁状态还给虚拟机带来了很多复杂度和维护难度,只有少数几个最有经验的工程师能够理解和修改它。它也影响了一些新特性的设计和实现。 综上所述,偏向锁状态已经不再适合现代的Java应用,所以在Java 15 之后被废弃。 ...

    2023-10-25 值得一看 80
  • Java面试题:不使用锁如何实现线程安全的单例?

    面试官问: 不使用锁,如何实现线程安全的单例? 如果不能使用synchronized和lock的话,想要实现单例可以通过饿汉模式、枚举、以及静态内部类的方式实现。 饿汉: 其实都是通过定义静态的成员变量,以保证instance可以在类初始化的时候被实例化。 // 单例模式 // 饿汉式(静态变量) class Singleton { // 1. 构造器私有化 private Singleton() {} // 2. 本类内部创建对象实例 private final static Singleton instance = new Singleton(); // 静态变量 // 3. 提供一个公有的静态方法,返回实例对象 public static Singleton getInstance() { return instance; } } 但是,如果从始至终未使用过这个实例,会造成内存浪费 静态内部类: 这种方式和饿汉方式只有细微差别,只是做法上稍微优雅一点。 // 静态内部类实现 class Singleton { // 构造器私有化 private Singleton() {} // 写一个静态内部类,含一个静态属性Singleton private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } // 提供一个静态的公有方法,直接返回SingleInstance.INSTANCE public static Singleton getInstance() { return SingletonHolder.INSTANCE; } } 原理和饿汉一样。这种方式是Singleton类被装载了,INSTANCE 对象不一定被初始化。 因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance 枚举: 借助了 JDK1.5 中添加的枚举来实现单例模式,不仅避免了多线程同步问题,而且还防止反序列化重新创建新的对象 // 枚举实现单例 enum Singleton { INSTANCE; // 属性 } 其实,如果把枚举类进行反编译,你会发现他也是使用了static final来修饰每一个枚举项。 final class Singleton extends Enum { public static final Singleton INSTANCE; private static final Singleton $VALUES[]; public static Singleton[] values() { return (Singleton[])$VALUES.clone(); } public static Singleton valueOf(String name) { return (Singleton)Enum.valueOf(cn/itsource/logweb/utils/Singleton, name); } private Singleton(String s, int i) { super(s, i); } static { INSTANCE = new Singleton("INSTANCE", 0); $VALUES = (new Singleton[] { INSTANCE }); } } 其实,上面三种方式,都是依赖静态数据在类初始化的过程中被实例化这一机制的。 但是,如果真要较真的话,ClassLoader的loadClass方法在加载类的时候使用了synchronized关键字。 也正是因为这样, 除非被重写,这个方法默认在整个装载过程中都是同步的(线程安全的)。 那么,除了上面这三种,还有一种无锁的实现方式,那就是CAS。 public class Singleton { // 使用了 AtomicReference 封装单例对象 private static final AtomicReference<Singleton> INSTANCE = new AtomicReference<Singleton>(); private Singleton() {} public static Singleton getInstance() { while (true) { // 使用 AtomicReference.get 获取 Singleton singleton = INSTANCE.get(); if (null != singleton) { return singleton; } // 使用 CAS 乐观锁进行非阻塞更新 singleton = new Singleton(); if (INSTANCE.compareAndSet(null, singleton)) { return singleton; } } } } 用CAS的好处在于不需要使用传统的锁机制来保证线程安全。  但是我们的实现方式中,用了一个while循环一直在进行重试,所以,这种方式有一个比较大的缺点在于,如果忙等待一直执行不成功(一直在死循环中),会对CPU造成较大的执行开销。 ...

    2023-10-25 值得一看 77
  • Linux ping命令参数用法详解

    ping命令 ping命令用于测试网络连接的可达性和延迟。它通过向目标主机发送ICMP回显请求(ping请求),并等待目标主机返回ICMP回显应答(ping应答)来判断网络连接的情况。 使用ping命令的基本语法如下: ping [选项] 目标主机 选项包括: usage: ping [-AaDdfnoQqRrv] [-c count] [-G sweepmaxsize] [-g sweepminsize] [-h sweepincrsize] [-i wait] [-l preload] [-M mask | time] [-m ttl] [-p pattern] [-S src_addr] [-s packetsize] [-t timeout][-W waittime] [-z tos] host ping [-AaDdfLnoQqRrv] [-c count] [-I iface] [-i wait] [-l preload] [-M mask | time] [-m ttl] [-p pattern] [-S src_addr] [-s packetsize] [-T ttl] [-t timeout] [-W waittime] [-z tos] mcast-group Apple specific options (to be specified before mcast-group or host like all options) -b boundif # bind the socket to the interface -k traffic_class # set traffic class socket option -K net_service_type # set traffic class socket options --apple-connect # call connect(2) in the socket --apple-time # display current time 例如,要ping一个目标主机(如www.example.com)并发送5个ping请求,可以使用以下命令: ping -c 5 www.example.com ping命令会显示每个ping请求的结果,包括目标主机的IP地址、ping请求的数据包大小、ping请求的时间、以及从目标主机返回的ping应答信息。 请注意,ping命令在不同操作系统中的具体实现可能会有所不同,因此一些选项可能会有所差异。 ping -t 的使用 ping -t 是一个Windows系统下的命令,用于连续向指定的目标IP地址发送ICMP Echo请求,以测试网络连接的稳定性和延迟。其中,-t 参数表示持续发送请求,直到手动停止。 ping -a 的使用 ping -a命令用于通过IP地址来获取对应的主机名。它会向指定的IP地址发送网络探测包,并等待目标主机的响应。当目标主机响应时,ping -a命令会返回该主机的主机名。 使用示例: ping -a 192.168.0.1 这个命令会向IP地址为192.168.0.1的主机发送网络探测包,并返回该主机的主机名。 ping -n 的使用 ping -n 是一个用于网络诊断的命令,它用于测试与目标主机之间的网络连接。在Windows系统中,ping -n命令用于指定要发送的ping请求的次数。 使用示例: ping -n 5 www.example.com 上述命令将发送5个ping请求到www.example.com,并显示每个请求的结果。 ping -l size 的使用 ping -l size 是用于指定ICMP数据包的大小的参数。其中,size表示要发送的数据包的大小,单位为字节。 通过使用ping -l size命令,可以测试网络的连通性和延迟。它会向目标主机发送ICMP数据包,并等待目标主机返回响应。通过观察响应时间和丢包情况,可以评估网络的质量和性能。 例如,要发送大小为64字节的数据包,可以使用以下命令: ping -l 64 注意,实际发送的数据包大小可能会比指定的大小稍大,因为还需要包含一些额外的头部信息。 ping -r count 的使用 ping -r count 是一个用于网络诊断的命令,其中 count 是指定要发送的 ICMP Echo 请求的次数。 使用 ping -r count 命令可以向指定的目标主机发送 ICMP Echo 请求,并显示每个请求的往返时间(RTT)以及路由路径上的每个中间路由器的 IP 地址。 以下是 ping -r count 命令的使用示例: ping -r 5 www.example.com 这个命令将向 www.example.com 发送 5 个 ICMP Echo 请求,并显示每个请求的 RTT 以及路由路径上的中间路由器的 IP 地址。 请注意,ping -r count 命令在不同的操作系统上可能会有一些差异,具体的用法和参数可能会有所不同。在使用该命令时,建议查阅相关操作系统的文档或使用 ping -r --help 命令获取更多详细信息。 批量 ping 网段 要批量ping一个网段,可以使用以下命令: for /L %i in (1,1,255) do ping -n 1 192.168.0.%i 这个命令会依次ping指定网段中的每个IP地址,从1到255。你可以将命令中的192.168.0替换为你要ping的网段。 注意,这个命令是在Windows系统下使用的,如果你使用的是其他操作系统,请使用相应的命令。 ...

    2023-10-25 技术教程 82
  • 某博一张好身材的皂片大赛

    点击围观  ...

    2023-10-25 福利分享 72
  • Linux后台执行程序Nohup Screen

    Nohup nohup (no hang up) 用于在系统后台不挂断运行命令,退出终端不会影响程序的运行。 例如某 Python 程序: nohup python -u main.py >> log.out 2>&1 & 2>&1 是一个重定向操作符,它使错误消息也会被写入 log.out 文件。 Screen 会话简单使用 screen 是一个命令行工具,允许在单个 SSH 会话或终端中创建和使用多个会话。 简单来说,Screen 对我最大的好处是即使关闭了终端,会话或执行的程序依然能够继续。 ❝相比于 nohup,screen 的使用更加灵活,用途更广。❞ 安装 Screen。 apt update && apt install screen 以下是 screen 的常用命令。 # 查看当前所有的 Screen 会话 screen -ls # 新建一个 Screen 会话 screen -S [name] # 离开 Screen 会话 # 按 Ctrl + a, 再按 d 分离会话 # 恢复 Screen 会话 screen -r [session ID] # 删除一个 Screen 会话 screen -X -S [session ID] quit 无 root 权限下安装 screen 目前我有一台服务器,但没有 root 和 sudo 权限。 现需要使用 screen,因此采用编译安装。 具体步骤如下: 下载 screen 的源代码。可以从 GNU Screen官方网站找到最新版本的下载链接。 wget https://ftp.gnu.org/gnu/screen/screen-4.9.1.tar.gz 解压源代码包。 tar -xvf screen-4.9.1.tar.gz 进入解压后的目录。 cd screen-4.9.1 配置编译并设置安装路径为用户 home 目录下的 myapps 文件夹。 ./configure --prefix=$HOME/myapps 编译 screen。 make 安装编译好的screen。 make install 添加环境变量。 # 编辑环境变量 vim ~/.bashrc # 将以下内容添加到最后一行 export PATH="$HOME/myapps/bin:$PATH" 检查 screen 是否配置成功: screen -version 刷新环境变量。 source ~/.bashrc </div> ...

    2023-10-24 值得一看 77
  • Windows文件夹加密和增量加密方法

    本文使用两种方式给文件夹进行加密。 虚拟文件保险柜 本节使用 Windows 自带工具 VHD 建立虚拟文件柜,并用 BitLocker 加密。 Win+S 打开搜索,输入 hard disk,选中 Create and format hard disk partitions,进入 Disk Managenment。 选择一个硬盘卷,依次点击 Action > Create VHD,按照要求选择或输入 VHD 生成位置,大小和属性等。 等待生成后可以在 Disk Managenment 界面看到新建的 VHD,右键该 VHD > Initialize Disk,选择 MBR 或 GPT。 初始化完成后,再次右键 Unallocated 的空间,选择 New Simple Volume 新增简单卷,按照要求新建即可。 该 VHD 可以 Eject 或 Mount,近似于移动硬盘。 以上是 VHD 的创建流程,接下来是 BitLocker 加密的设置。 将新建的 VHD 双击后挂载 (Mount)。 Win+S 打开搜索,输入 bitlocker,进入 Manage BitLocker 界面。 找到该 VHD,点击 Turn on BitLocker,按照要求设置密码等配置即可。 ❝该方法的好处是不需要依赖于第三方软件,可以在各个 Windows 系统电脑中直接使用。个人感觉适用于存储长期不做更改的加密文件。❞ 不需要该文件柜时,直接删除即可。 Cryptomator 增量加密 上述方法的缺点是如果我们需要将该文件在云盘同步,则每次都需要将所有的空间全部覆写一边。这样做非常麻烦。 Cryptomator 是一款开源免费的增量加密软件,能够解决上述的问题。 Cryptomator 的安装和操作非常简单,按照流程执行即可,在此不做赘述。 另外,Cryptomator 还可以搭配 Cyberduck 一起使用。后者可以用来直接访问云盘的内容。 ...

    2023-10-23 技术教程 73
  • 终端基础:Linux终端中的目录切换

    本篇文章作为终端基础教程系列的一部分,介绍如何在 Linux 命令行中,利用绝对路径和相对路径实现目录切换。 Linux 的 cd命令让你可以轻松切换文件夹(即目录)。只需提供你要切换到的文件夹路径即可。 cd path_to_directory 然而对于 Linux 新人来说,可能会在路径的指定上有所困扰。 首先,让我们解决这个问题。 理解 Linux 中的路径 在 Linux 文件系统中,路径是用来追踪文件位置的信息。所有的路径都从根目录开始,然后向下延伸。 你可以通过下面的方式查看当前所在的位置: pwd 结果可能是类似于 /home/username的输出。注意,这里的username将会是你自己的用户名。 你可以注意到,路径是由 /符号和目录名组成的。比如路径/home/abhishek/scripts, 表示scripts是在文件夹abhishek之内,而文件夹abhishek在home文件夹之内。要注意,第一个 ‘/’ 是指根目录(即文件系统的开始处),后面的 ‘/’ 则作为目录的分隔符。 ?️ 在终端中键入 ls /,然后按回车。你将会看到根目录下的所有内容,试试看! 接下来,让我们学习两种常见的路径指定方式:绝对路径和相对路径。 绝对路径:这种路径从根开始,然后一直扩展到你需要的位置。如果一个路径是以/开头,那就说明它是一个绝对路径。 相对路径:这是相对于你文件系统中当前位置的路径。如果我当前位置在/home/abhishek,并且我需要去/home/abhishek/Documents, 我只需要简单地切换到Documents,而不需要指定整个绝对路径/home/abhishek/Documents。 在我演示这两种路径的区别之前,有必要先熟悉两个特殊的目录标识: .(单点)表示当前目录。 ..(双点)表示上一级目录,也就是当前目录的母目录。 这里有一张图形化的表示。 利用 cd 命令变更目录 在你已对路径概念有所了解之后,我们来了解如何切换目录。 ?️ 如果你仅键入 cd并按回车键,无论当前位置在哪,系统都会将你带回主目录。试一试吧。 敲入以下命令,你就能看到主目录里的所有文件夹: ls 这是我看到的情况: abhishek@ituxedo:~$ ls Desktop Downloads Pictures Templates VirtualBoxVMs Documents Music Public Videos 你的情况可能与此类似,但未必完全一样。 假如你希望跳转到 Documents文件夹。由于它就在当前目录下,这里使用相对路径会比较方便: cd Documents ? 注意,大部分 Linux 发行版预设的终端模拟器会在提示符本身显示出当前所在的位置。因此你不必频繁使用 pwd指令来确认自己的位置。 假如你希望切换到位于主目录里的 Templates文件夹。 你可以使用相对路径 ../Templates(..会让你返回到上层目录,即/home/username,然后你就可以进入Templates文件夹了)。 但这次我们尝试使用绝对路径。请把下面的 abhishek替换成你的用户名。 cd /home/abhishek/Templates 此刻你已经在 Templates文件夹里了。如何前往Downloads文件夹呢?这次我们再使用相对路径: cd ../Downloads 下面的图片会回顾一下你刚才学到的所有或有关目录切换的范例。 ? 别忘了你还可以使用终端的 tab键自动补全功能。只需要键入命令或者文件夹名称的前几个字母,然后敲击tab键,系统就会尝试自动地补全命令或文件夹名称,或者给你显示出所有可能的选项。 故障解决 在 Linux 终端操作切换目录的过程中,你可能会遇到一些常见的错误。 文件或目录不存在 如果在你尝试切换目录时,出现类似下面的错误信息: bash: cd: directory_name: No such file or directory 那么你可能在路径或目录名称上犯了误解。这里有几点你需要注意的: 请确定你输入的目录名中没有拼写错误。 Linux 系统对大小写敏感,因此,Downloads和downloads会被识别为不同的目录。 你可能未正确指定路径。可能你所在的位置与你预期的不同?或者你遗漏了绝对路径中的开头的 /字符? 非目录错误 如果你看到像下面这样的错误提示: bash: cd: filename: Not a directory 这表示你尝试使用 cd命令对一个文件进行操作,而不是一个目录(文件夹)。很明显,你不能像进入文件夹那样“进入”一个文件,因此会出现这样的错误。 参数过多 这是 Linux 新手常犯的另一个错误: bash: cd: too many arguments cd命令只接受一个参数。也就是说,你只能对命令指定一个目录。 如果你指定了超过一个的参数,或者在路径中误加了空格,你就会看到这个错误。 ?? 如果你输入 cd -,它将会把你带到前一个目录。当你在两个相隔较远的地方切换时非常方便,可以避免再次输入长路径。 特殊目录符号 在结束这个教程之前,我想快速告诉你关于特殊符号 ~。在 Linux 中,~是用户主目录的捷径。 如果用户 abhi运行它,~就会代表/home/abhi,如果用户prakash运行,~就意味着/home/prakash。 总结一下你在这个基础教程系列中学到的所有特殊目录标识: 符号 描述 . 当前目录 .. 上级目录 ~ 主目录 - 前一个目录 测试你的知识 下面是一些简单的练习,用来测试你刚刚学到的关于路径和 cd命令的知识。 移动到你的主目录,并使用这个命令创建一个嵌套的目录结构: mkdir -p sample/dir1/dir2/dir3 然后,一步步来试试这个: 使用绝对路径或相对路径进入 dir3 使用相对路径移动到 dir1 使用你能想象到的最短路径进入 dir2 使用绝对路径切换到 sample目录 返回你的主目录 ? 想知道你是否全都做对了吗?欢迎分享你的答案。 ...

    2023-10-22 值得一看 68
  • MySQL: Binlog复制如何安全地跳过错误事务

    MySQL是一个功能强大的开源关系数据库管理系统,它提供了二进制日志(Binlog)复制功能,帮助数据库管理员在主从架构中同步数据。 然而,在实际运营过程中,可能会遇到由于某些错误事务而导致复制过程中断的情况。 在确认是单独的错误事务导致问题后,我们可以在从服务器(Slave)上采取措施来跳过该错误事务,然后继续复制过程。 首先,我们需要停止从服务器上的复制过程,以确保不会有新的数据被复制过来。 可以通过执行以下命令来停止复制: STOP REPLICA; 接下来,我们需要设置全局变量sql_slave_skip_counter,以指定要跳过的错误事务数量。 通常情况下,如果只有一个错误事务,我们可以将该变量设置为1: SET GLOBAL sql_slave_skip_counter = 1; 然后,我们可以重新启动复制过程,以继续复制后续的事务: START REPLICA; 为了验证我们的操作是否成功,可以通过以下命令检查复制的状态和sql_slave_skip_counter的值: SHOW REPLICA STATUS\G show variables like 'sql_slave_skip_counter'; 一旦复制应用启动,GLOBAL sql_slave_skip_counter变量会被重置为0。这意味着,如果在将来再次遇到需要跳过的错误事务,我们需要再次设置这个变量。 虽然我们可以将sql_slave_skip_counter设置为一个非常大的值,以确保启动后所有错误都会被忽略,但这并不是一个推荐的做法。这样做可能会忽略掉所有的错误事务,包括那些可能会影响数据完整性或系统稳定性的重要错误,甚至会错过正常的事务导致数据丢失。 因此,通常建议仅在清楚知道错误事务的性质和影响时,才使用sql_slave_skip_counter来跳过错误事务。 总结来说,通过理解和应用sql_slave_skip_counter变量,我们可以在遇到错误事务时,有选择地跳过它们,以保持复制过程的连续性。 但同时,我们也应该注意不要滥用这个功能,以避免产生不可预见的问题。 在处理复制错误时,应该先尝试找出并解决错误的根本原因,而不是简单地跳过错误事务。 通过这样的实践,我们可以确保我们的MySQL复制环境更加健壮和可靠。 ...

    2023-10-22 技术教程 76
  • 攻防演练 | 如何使用 Docker 搭建代理池+隧道代理

    前言 作为一种常见的服务器防御网络攻击或探测手段,封 IP 可以有效地保护服务器免受恶意攻击。在进行安全测试时,安全人员需要使用代理来隐藏真实 IP 地址,并依靠代理池获取可用的代理地址。同时,为了更方便地在某些工具中使用代理,可以借助隧道代理直接将请求转发给不同的代理服务器,从而避免 IP 被封锁。 本文介绍了一种利用 Docker 搭建代理池和隧道代理的方法,并通过对 httpbin.org 的访问和红队工具 dirsearch 的使用进行了测试。这种方法能够快速搭建一个免费、高效、稳定且易于管理的代理环境,在进行网络渗透测试等任务时非常有帮助。 下图为搭建过程的流程图: Docker 的准备 我这里都是使用的 Docker 搭建。 Docker 可能用到的命令如下: # 查看当前运行的 docker 容器 ID 和运行状况 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c09ae6b9c554 tunnel_proxy:0.02 "/usr/local/openrest…" 2 hours ago Up 2 hours tunnel_proxy 17bc67d0f892 germey/proxypool:master "supervisord -c supe…" 2 hours ago Up 2 hours 0.0.0.0:5555->5555/tcp, :::5555->5555/tcp proxypool b659295a7927 redis:alpine "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6374->6379/tcp, :::6374->6379/tcp redis4proxypool [root@localhost ~]# docker exec -it 17 /bin/sh/app # lsDockerfile README.md docker-compose.yml kubernetes release.sh run.py supervisord.logLICENSE build.yaml examples proxypool requirements.txt supervisord.conf exit 退出   命令:docker exec -it <id> /bin/bash在指定 id 的 Docker 容器中执行指令,id 通过docker ps命令来获取。如果执行的是 shell 程序比如 /bin/bash 或者 /bin/sh 就能进入到容器的 shell 里,可以执行一些 linux 指令,id 可以使用前几位可以区分不同容器的字符就行,我这里用的前两位。 如果在接下来的配置中有问题,可以使用这种方式进入容器里查看日志,或者按照我的配置将日志文件映射到本地。 启动 Docker 用的程序是 docker-compose。如果你输入 docker-compose 提示找不到这个程序,有可能是没有安装或者是 /bin 目录下没有。 使用docker info命令查看 docker-compose 程序的位置 [root@localhost ~]# docker infoClient: Docker Engine - Community Version: 24.0.2 Context: default Debug Mode: false Plugins: buildx: Docker Buildx (Docker Inc.) Version: v0.10.5 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose (Docker Inc.) Version: v2.18.1 Path: /usr/libexec/docker/cli-plugins/docker-compose 检查一下 docker-compose 有无执行权限,如果没有,就要sudo chmod +x /usr/local/bin/docker-compose赋予执行权限 [root@localhost proxy_pool]# cd /usr/libexec/docker/cli-plugins/[root@localhost cli-plugins]# ll总用量 108356-rwxr-xr-x 1 root root 56327368 5月 26 05:56 docker-buildx-rwxr-xr-x 1 root root 54627904 5月 20 02:09 docker-compose 如果无法直接运行 docker-compose,可能需要创建软链接 [root@localhost cli-plugins]# ln -s /usr/libexec/docker/cli-plugins/docker-compose /usr/bin/docker-compose[root@localhost work]# docker-compose --versionDocker Compose version v2.18.1 代理池 ProxyPool 我这里用的是开源的代理池,自动从免费代理网站上爬取 http 代理。Python3WebSpider/ProxyPool 这个项目有四个模块:获取IP模块,存储模块,检测模块,接口模块。它包含两个 Docker 容器:redis4proxypool 和 proxypool,对于容器的设置都在 ProxyPool 根目录的 docker-compose.yml 文件里。对于容器的配置留到下部分再详细描述,先跑起来再说。 首先 gitclone git clone https://github.com/Python3WebSpider/ProxyPool.gitcd ProxyPool 然后启动 docker 环境 docker-compose up 这时候如果防火前的 5555 端口是开放的,访问 http://<当前 ip>:5555/random 即可随机获取一个可用代理,不需要做任何的修改。效果图如下: random 接口返回的是随机的高分 IP,也就是已验证能访问测试 URL 的 IP。高分,指的是在 redis 数据库中,获取 IP 模块获取的每一条 IP 的分数,如果检测模块用 IP 访问测试链接,能成功访问则设置这个分数为 100,单次测试访问失败则将分数减 1。 ProxyPool 的配置 在 ProxyPool 目录下使用命令docker-compose down可以关闭 docker。接下来,我们修改 ProxyPool 的配置。它包含两个容器,一个是 redis4proxypool,也就是 redis 数据库的部分,下文用 redis 来代替,另一个容器是 proxypool,也就是负责代理池逻辑的部分。 redis 为了查看或者 redis 里的这些数据,首先要设置 docker-compose.yml,设置 6374 的端口映射 version: "3"services: redis4proxypool: image: redis:alpine container_name: redis4proxypool # 把容器内部的 6379 端口映射到宿主机(host)的 6374 端口,这样就可以通过宿主机的 6374 端口来访问容器内部的 Redis 数据库 ports: - "6374:6379" proxypool: image: "germey/proxypool:master" container_name: proxypool ports: - "5555:5555" restart: always # volumes: # - proxypool/crawlers/private:/app/proxypool/crawlers/private environment: PROXYPOOL_REDIS_HOST: redis4proxypool 开启容器之后,要查看 redis 用到的命令如下: [root@localhost ProxyPool]# redis-cli -h 127.0.0.1 -p 6374   keys * 获取 redis 中所有的 key 127.0.0.1:6374> keys * "proxies:universal" type <key> 获取 key 的类型 127.0.0.1:6374> type proxies:universalzset 因为是 zset 有序类型,所以用 zrange 获取所有数据,后面两个参数是开始位置和结束位置 127.0.0.1:6374> zrange proxies:universal 0 -1...18156) "72.44.101.173:8080"18157) "95.56.254.139:3128" 获取分数为 100 的,用 zrangebyscore,后面两个参数是最小值和最大值 127.0.0.1:6374> zrangebyscore proxies:universal 99 100 "103.189.96.98:8085" "186.121.235.66:8080" "200.4.217.203:999" "103.74.121.88:3128" "117.251.103.186:8080"... exit 退出 proxypool 针对 proxypool 也有不少设置可以自定义,在使用 Docker 的情况下,在 docker-compose.yml 文件中,设置 environment 参数即可。 这里修改了 volumes 参数,把容器里的指定文件夹映射到宿主机的指定位置。proxypool 在容器里工作的根目录是 /app,所以这里是把 /app/proxypool/logs 文件夹映射到主机的 ProxyPool/logs/proxypool 目录下。 设置了以下环境变量: CYCLE_TESTER, Tester 运行周期,即间隔多久运行一次测试,默认 20 秒,这里修改为 5 秒。 PROXYPOOL_REDIS_PORT,容器内部的 6379 连接 redis4proxypool。 TEST_URL, 测试 URL,默认百度,指定要爬取的 URL。 REDIS_KEY,redis 储存代理使用字典的名称,其中 PROXYPOOL_REDIS_KEY 会覆盖 REDIS_KEY 的值。 LOG_DIR: "proxypool/logs" ,这个参数不知道为啥设置了并没有什么用,尝试了 n 遍,本来按照源码,没有上面这个参数也应该写到 logs 相对目录下,但是程序并没有写入,所以保存日志文件只能用下面这种相对路径的写法。 LOG_RUNTIME_FILE,运行日志文件名称。 LOG_ERROR_FILE,错误日志文件名称。 加了 depends_on 参数,意思是先启动 redis4proxypool 在启动 proxypool,这样确保在启动 proxypool 之前先启动了 redis4proxypool,以避免可能的连接问题。 version: "3"services:redis4proxypool:image: redis:alpinecontainer_name: redis4proxypoolports: "6374:6379"proxypool:image: "germey/proxypool:master"container_name: proxypoolports: "5555:5555"restart: always volumes: ./logs/proxypool:/app/proxypool/logsvolumes: - proxypool/crawlers/private:/app/proxypool/crawlers/private environment:CYCLE_TESTER: 5PROXYPOOL_REDIS_HOST: redis4proxypoolPROXYPOOL_REDIS_PORT: 6379TEST_URL: https://httpbin.org/ipREDIS_KEY: proxies:httpbinLOG_RUNTIME_FILE: "./proxypool/logs/proxypool_runtime.log"LOG_ERROR_FILE: "./proxypool/logs/proxypool_error.log"depends_on: redis4proxypool 隧道代理 我们使用一些扫描或者爆破工具的时候,大部分情况下,配置选项中只能选择一条代理,被封 IP 的可能性仍然很大,有没有什么方法能在请求的时候自动切换代理服务器呢?这就是隧道代理。 隧道代理服务器,能将接收到的请求随机或者按规则转发给不同的代理,这样,相当于在工具中只需要设置代理为隧道代理服务器,自动切换 IP 的任务交给隧道代理。 我这里使用的 OpenResty 搭建的隧道代理,也是用的 Docker,并把配置整合到了 docker-compose.yml 文件中。 参考链接:openresty实现隧道代理 ...

    2023-10-21 技术教程 212
  • 10月21日,星期六简报,60秒知晓天下事

    2023年10月21日,星期六,农历九月初七,每天60秒知天下 1、各省份经济三季报陆续出炉:四川重庆辽宁等增速高于全国平均;商务部:今年前三季度全国直播电商销售额达1.98万亿,增长60.6%,占网络零售额18.3%; 2、2024国考报名人数已突破100万,国家知识产权局一职位竞争最激烈,竞争比高达1117.5:1; 3、传染病防治法拟修订:改进疫情报告制度,禁止干预报告;国家医保局:职工医保、居民医保政策范围内住院费用报销比例达80%和70%左右; 4、国常会:取消调整33个罚款事项,严查以罚代管、过罚失当;慈善法修正草案提请审议:完善公开募捐制度,不得通过虚构事实等方式骗取救助; 5、三亚首发水上旅游管理新规:水上旅游项目应明码标价;民政部:推动会员单位面向高校毕业生发布招聘岗位68万个; 6、网传青岛啤酒三厂员工在原料仓内小便,青岛啤酒回应:警方介入调查,该批麦芽已经全部封存; 7、台风“三巴”致广东茂名多地受灾,全市转移危险区域人员9910人;中央气象台:台风“三巴”减弱停编,广东西南部、海南岛东北部等地仍有较强降雨; 8、天津一儿童遭“开门杀”后被公交车碾压死亡,警方通报:刑拘小客车司机; 9、内蒙古一在建厂房屋顶坍塌,致3死8伤,官方回应:厂房仅一层,是钢结构建筑,坍塌面积三千余平方米; 10、美方发布《中国军力报告》炒作“中国有超500枚核弹头”,中方驳斥:报告罔顾事实,充满偏见,坚决反对;美媒:俄撤销批准《全面禁止核试验条约》数小时后,美进行高爆试验; 11、外媒:伊拉克和叙利亚多处美军基地接连遭袭,有军人受轻伤;美国国务院向海外美国人发布全球安全警示:警惕极端主义袭击; 12、美媒:美众院议长选举第三轮投票仍无果;此前越界入朝美士兵已被美军方拘留,面临逃兵罪等多项指控; 13、韩媒:拉夫罗夫与朝鲜外相会谈后,韩国政府表态:愿无条件与朝鲜对话;美B-52战略轰炸机首降韩国,朝中社警告:应当是朝鲜第一个“消灭对象”; 14、法媒:法国多地学校和机场拉响炸弹警报,执法部门48小时内进行18次逮捕;法国酿酒商在高速公路上示威,拦截来自西班牙的卡车,抗议进口西班牙葡萄酒; 15、以色列公布对加沙地带的作战计划和目标:彻底消灭哈马斯,并在加沙建新政权;以色列政府批准法规:紧急状态期间可暂停外国新闻频道在以运营; 【每日金句】如果你第一步不迈出,就永远不知道你的梦想是多么容易实现。    ...

    2023-10-21 值得一看 74
  • 某博「欲女气质」大赛✨ ​​​

    点击围观  ...

    2023-10-21 福利分享 105
  • 某博「颜值担当」大赛✨ ​​​

    点击围观  ...

    2023-10-20 福利分享 65

联系我们

在线咨询:点击这里给我发消息

QQ交流群:KirinBlog

工作日:8:00-23:00,节假日休息

扫码关注