首页
Search
1
解决visual studio code (vscode)安装时没有选择安装路径问题
138 阅读
2
Linux 下 Bash 脚本 bad interpreter 报错的解决方法
131 阅读
3
Arch Linux 下解决 KDE Plasma Discover 的 Unable to load applications 错误
107 阅读
4
如何在 Clash for Windows 上配置服务
77 阅读
5
Uniapp如何引入自定义样式文件
75 阅读
clash
服务器
javascript
全部
游戏资讯
登录
Search
加速器之家
累计撰写
1,061
篇文章
累计收到
0
条评论
首页
栏目
clash
服务器
javascript
全部
游戏资讯
页面
搜索到
624
篇与
的结果
2024-09-04
Web开发中两种导出文件的思路
场景注意是导出文件的场景,不是普通的现在文件,导出文件一般先要生成文件然后在下载文件,比如企业中经常用到的excel导出功能,先生成excel表格。在下载excel表格如果现在让你做这么一个导出excel的功能你第一时间会想到什么?一般都会想到在文件生成之后在response中声明Content-Type的MIME为二进制文件浏览器会自动进行下载,这是在response上面做文章,整个过程发了一次请求在实际开发过程中还看到一种做法:不在response上面做文章,直接在服务器上生成可以下载的文件,然后返回文件的路径,js在请求下载该文件,这是在js上做文章,整个过程发了两次请求下面分别看一下两种思路的实现方案在response上声明下载在Java Spring框架中你可以这么写@GetMapping("/export") public void export(HttpServletRequest request, HttpServletResponse response,SwaggerUserFindVO user) throws IOException { //set header String fileName = "用户数据导出"+System.currentTimeMillis()+".xls"; String userAgent = request.getHeader("user-agent").toLowerCase(); // WIN10 IE EDGE 浏览器 和其他系统的ie if (userAgent.contains("msie") || userAgent.contains("like gecko") ) { fileName = URLEncoder.encode(fileName, "UTF-8"); //非IE } else { fileName = new String(fileName.getBytes(),"ISO8859-1"); } response.setContentType("application/octet-stream;charset=ISO8859-1"); response.setHeader("Content-Disposition", "attachment;filename="+ fileName); response.addHeader("Pargam", "no-cache"); response.addHeader("Cache-Control", "no-cache"); //write file OutputStream os = response.getOutputStream(); //组装excel XSSFWorkbook wb = createWorkbook(); wb.write(os); os.flush(); os.close(); }最后直接在浏览器地址栏输入路径,用GET请求下载即可,整个过程一次请求在js中请求文件下载后端@RequestMapping(value = "/export",produces = "application/text; charset=utf-8") @ResponseBody public String exportKeywordSceneMonitoringData(HttpServletRequest request) { //容器根path,这个地方生成的文件可以被容器直接访问 String path = request.getSession().getServletContext().getRealPath("/") //定义临时目录 String folderName = "/tempLoad"; //创建目录 File file = new File(path + folderName); if (!file.exists()) { file.mkdirs(); } //文件名字 fileName = "/文件导出.xlsx"; StringBuilder filePath = new StringBuilder(path).append(folderName).append(fileName); //生成此文件 SXSSFWorkbook workbook = new SXSSFWorkbook();//TODO FileOutputStream out = new FileOutputStream(filePath); workbook.write(out); //返回文件名称 return folderName + fileName; }前端var params = {}; $.ajax({ type: 'post', url: '../app/export', data: params, dataType: 'text', success: function(_fileName){ if (_fileName != '') { //浏览器地址栏给生成的文件发送GET请求即可下载 window.location.href = "../" + _fileName; } }, error: function(){ } }); 在js中控制下载,整个过程两次请求
2024年09月04日
8 阅读
0 评论
0 点赞
2024-09-03
工欲善其事必先利其器,IDEA必装插件
工欲善其事必先利其器,IDEA必装插件!代码缩略图 CodeGlance推荐指数:★★★★★用过sublime Text的都知道它第一印象就是编辑器最右边有一个缩略图,可以很好的对代码进行导航setter生成器 GenerateAllSetter推荐指数:★★★★★遇到这种情况你会怎么办Person p = new Person(); //假设Person的属性很多...小白一个一个敲,老白可能会用正则表达式批量生成setter,老司机一般都是安装GenerateAllSetter,然后在alt+enter直接调出来所有setter,还带有默认值,如下图所示彩虹括号 Rainbow Brackets推荐指数:★★★★彩虹括号,一图胜千言,在层级很深的时候很管用Mybatis SQL查看 Mybatis-log-plugin推荐指数:★★★★★看名字就能猜个七七八八,它最核心的作用就是将下面这种==> Preparing: INSERT INTO user ( id, name, age, email, u_sex, createtime ) VALUES ( ?, ?, ?, ?, ?, ? ) ==> Parameters: 0(Long), demoData(String), 0(Integer), demoData(String), demoData(String), 2020-12-22 20:34:26(String)转换成下面这种INSERT INTO user ( id, name, age, email, u_sex, createtime ) VALUES ( 0, 'demoData', 0, 'demoData', 'demoData', '2020-12-22 20:34:26' ) 聪明人一眼就能看懂可惜IDEA2020需要收费了,但是有 开心版可用,在IDEA插件界面,右上角小齿轮,install from disk,懂我的意思吧热部署 JRebel推荐指数:★★★★★这个插件的神奇之处在于不用重启项目就能热部署,虽然spring boot自带热部署插件,但是仍然需要重启项目,JRebel直接重新加载修改过的类,无论是你新增加了方法还是新增加了类。当然插件是收费的,下面来看一下如何使(po)用(jie)安装,到插件安装处搜索JRebel,全名为Jrebel And Xrebel for IntelliJ生成GUID https://www.guidgen.com/用https://jrebel.qekang.com/ 拼接上刚才生成的GUID,如 https://jrebel.qekang.com/5d01a8cc-9f04-497c-91de,如下图所示安装完成后一定要点一下WORK OFFLINE使用的时候注意勾上下图中的两个框,然后点击上面的用Rebel启动项目如果不想给钱又想用正版呢?送一个白嫖的方法,:Google一下myJrebel,按照流程走,申请一个Facebook account 然后关注他们,就会送你一个免费的社区license,亲测好用,前提是有梯子。简单接口调用工具 RestfulTool推荐指数:★★★★★需要临时测试一下接口怎么办?用postman然后挨个复制请求参数?No,你可以有更简便的办法,RestfulTool会自动扫描项目中所有的接口,然后自动生成接口的请求参数,点击右边发送按钮即可测试接口这个插件暂时不能保存参数,想要保存参数之类的建议用postman依赖分析 Maven Helper推荐指数:★★★★★Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓的依赖冲突。幸运的是什么呢?在大多数时候,依赖冲突可能并不会对系统造成什么异常,因为Maven始终选择了一个Jar包来使用。但是不幸的却是,不排除在某些特定条件下,会出现类似找不到类的异常,所以,只要存在依赖冲突,在我看来,最好还是解决掉,不要给系统留下隐患。而要介绍的这个Maven Helper 插件就可以解决这个问题。怎么用呢?安装之后打开pom.xml文件,底部有个Dependency Analyzer选项,点击按键提示 Key Promoter X推荐指数:★★★★这是一个快捷键提示的插件,当你点击界面上任意图标时,就会在右下角提示你可用快捷键代替,如图它有一个统计功能,可以清楚的知道你最常用的功能是啥JSON转换对象 GsonFormatPlus推荐指数:★★★个插件在IDEA2020上叫GsonFormatPlus,以前叫GsonFormat,顾名思义,将json字符串生成Java对象,这种需求其实有很多在线工具站也可以生成,看需求安装Java字节码查看 jclasslib bytecode viewer推荐指数:★★★★当你学习到JVM的时候,可能需要用到字节码查看器,虽然java自带了字节码查看工具javap,但是总感觉不是很方便github地址详细介绍:IDEA字节码学习查看神器jclasslib bytecode viewer介绍主题美化 Material Theme UI推荐指数:★★★★这是一个美化插件,大致效果如下,个人比较喜欢,按需安装吧部分主题效果可选主题如下更多信息参考插件官网:https://plugins.jetbrains.com/plugin/8006-material-theme-ui番外篇IDEA 装好的常用设置,更符合自己的习惯,提高效率键盘映射我习惯用Eclipse的键盘映射,所以设置成Eclipse,FIle > Settings > Keymap选择Eclipse即可DEBUG我习惯按键和Chrome控制台一致,F10是Step Over,F11是Step Into,如下图设置字体更改我喜欢Consolas,FIle > Settings > Editor > Font,将字体选择为Consolas开启滚轮缩放字体FIle > Settings > Editor > General,勾选上Change font size with Ctrl+Mouse Wheelpojie这里推荐一种pojie思路:无限试用插件:IDE Eval Reset,避免失效地址
2024年09月03日
18 阅读
0 评论
0 点赞
2024-09-02
Java_Oracle数据库连接池频繁出现ORA-02399错误
ORA-02399具体错误信息为ORA-02399: exceede maximum connect time, you are being logged off大概含义为:超过了最大连接时间,你被强行登出出现原因首先看一下Oracle CONNECT_TIME参数是多少SELECT * FROM DBA_PROFILES WHERE PROFILE='DEFAULT' AND RESOURCE_NAME IN ('IDLE_TIME','CONNECT_TIME');本案列中的设置值PROFILE|RESOURCE_NAME |RESOURCE_TYPE|LIMIT | -------|-------------------------|-------------|-------------------| DEFAULT|IDLE_TIME |KERNEL |14 | DEFAULT|CONNECT_TIME |KERNEL |10 |CONNECT_TIME: Parameter will disconnect a session whose connect time exceed the value for connect_time.The connect_time is expressed in minutes.CONNECT_TIME: 会断开超过CONNECT_TIME时间的会话,单位是分钟,默认应该是UNLIMITEDIDLE_TIME: Permitted periods of continuous inactive time during a session(minutes).IDLE_TIME: 在会话期间允许的连续不活动时间,单位也是分钟,默认是10分钟所以原因很简单,CONNECT_TIME默认为无限制被设置成为10分钟,所以每隔十分钟数据库连接就会被强行登出(不管你有没有在执行SQL),所以导致连接不可用就会报错ORA-02399解决改数据库参数将两个值改成无限或者长一点ALTER PROFILE DEFAULT LIMIT IDLE_TIME UNLIMITED; ALTER PROFILE DEFAULT LIMIT CONNECT_TIME UNLIMITED;改连接池参数Hikari连接池max-lifetime用来设置一个connection在连接池中的存活时间,默认是1800000,即30分钟。如果设置为0,表示存活时间无限大。如果不等于0且小于30秒则会被重置回30分钟。# 单位毫秒 max-lifetime: 300000普通数据库连接池设置maxAge参数(比如org.apache.tomcat.jdbc.pool.DataSource)<property name="maxAge" value="300000"/>看下参数的含义/** * Time in milliseconds to keep this connection alive even when used. * When a connection is returned to the pool, the pool will check to see if the * ((now - time-when-connected) > maxAge) has been reached, and if so, * it closes the connection rather than returning it to the pool. * The default value is 0, which implies that connections will be left open and no * age check will be done upon returning the connection to the pool. * This is a useful setting for database sessions that leak memory as it ensures that the session * will have a finite life span. * @param maxAge the time in milliseconds a connection will be open for when used */ public void setMaxAge(long maxAge);参考https://smarttechways.com/2018/12/05/connect_time-and-idle_time-in-oracle-profile/
2024年09月02日
7 阅读
0 评论
0 点赞
2024-08-30
5分钟了解游戏加速器的原理与搭建
5分钟了解游戏加速器的原理与搭建背景一般来讲,国内运营商都有QoS百度百科:QoS ( Quality of Service,服务质量)指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术。说白了就是在网络拥堵的时候运营商会直接把一些不重要的流量包丢掉,至于啥是“不重要的”就要去问运营商了(看人下菜碟)。对被 QoS的用户来说,表现就是、网速降低、丢包、ping 值极不稳定,给钱越多的网络质量越好,例如带宽更高,丢包更少,延迟更低。当然QoS是不区分TCP和UDP的,对于UDP而言,除了常规QoS,还有更严格的限制甚至在某些极端情况下会屏蔽掉UDP,主要原因是UDP无连接、无状态、支持广播、最大努力送达等特性让运营商控制UDP的成本太高来一张喜闻乐见的对比图![r/MoeMorphism - [OC] Internet runs on two Packet Protocols: TCP is used to reliably exchange data while UDP is preferred when speed is more important than information integrity (I know it’s so specific, but I hope you’ll like it!)](assets/2021-11-21_5分钟了解游戏加速器的原理与搭建/rs6z0ff7yht51.jpg)一般游戏为了保证实时性,都会采用UDP进行网络传输,比如玩射击游戏角色正在行走的时候,网络卡了一下,但是一秒不到游戏角色已经移动到下一个位置了,这是UDP的表现,它尽最大努力送达,允许丢包;假设是TCP,网络卡一下,你会发现游戏画面暂停了,角色向卡幻灯片一样的往前行走,因为TCP是面向连接的,丢包会重发,到达会确认。当然游戏不全是UDP,TCP甚至更上层的HTTP也有,这完全取决于游戏对延迟的要求。那么游戏中到底是用UDP还是TCP呢?如果是由客户端间歇性的发起无状态的查询,并且偶尔发生延迟是可以容忍,那么使用HTTP/HTTPS吧。如果客户端和服务器都可以独立发包,但是偶尔发生延迟可以容忍(比如:在线的纸牌游戏,许多MMO类的游戏),那么可考虑使用TCP长连接如果客户端和服务器都可以独立发包,而且无法忍受延迟(比如:大多数的多人动作类游戏,一些MMO类游戏),那么考虑使用UDP在玩一些外服游戏(游戏服务器在国外)的时候,直连效果差,需要加一层代理也就是加速器,实现加速效果,因为游戏一般为UDP传输但运营商对UDP干扰严重,所以需要将游戏客户端到代理服务器之间的连接做一些处理。UDP QoS下面详细说一下针对UDP的QoS,UDP socket每次发包都换一个不同的源端口,如果一个设备疯狂发送UDP包,将会在短时间内创造大量的五元组。传统的状态防火墙,状态NAT会用一个 五元组来追踪一条 连接 。如果连接过多,就会对这些保存状态的设备造成很大的压力,这种压力主要体现在两个方面:存储压力:设备不得不配置大量的内存来保存大量的连接。处理器压力:设备不得不在数据包到来的时候花更多的时间来匹配到一条连接。由于UDP的无状态特征,没有任何报文指示一条连接什么时候该创建什么时候该销毁,设备必须有能力自行老化已经创建的UDP连接,且不得不在权衡中作出抉择:如果老化时间过短,将会破坏正常通信但通信频率很低的UDP连接。如果老化时间过长,将会导致已经无效的UDP连接消耗大量的内存,这将为DDoS攻击创造一个攻击面。攻击者只需要用不同的UDP五元组构造报文使其经过状态设备即可,由于UDP报文没有任何指示连接创建销毁的控制信息,状态设备不得不平等对待任何新来的五元组,即为它们创建连接,并且指定相同的老化时间。TCP与此完全不同,由于存在syn,fin,rst等控制信息,状态设备便可以针对不同状态的TCP连接指定不同的老化时间,ESTABLISHED状态的连接显然要比其它状态的连接老化时间长得多。这导致使用TCP来实施同样的攻击会困难很多。为什么快速构造不同的TCP五元组达不到UDP同样的效果?如果你只是盲目的用不同源端口发送syn,在没有真正的对端回应的情况下,这种状态的连接将会很快老化掉(10秒以内,甚至更短)。如果你构造使用不同端口的大量真正的TCP连接,那么在状态设备受到伤害的同时,你自己也必须付出巨大的代价来维持住这些连接。你发起一个TCP连接,为了让状态设备保存这条连接,你自己也不得不保存这条连接,除非你通过海量的反射主机同时发起真连接,否则在单台甚至少量的主机上,这种攻击很难奏效。对于无状态设备,我们便不必再纠结五元组连接的保持了。但是UDP短期构造海量五元组的能力仍然会影响无状态设备包分类算法的正常运行。基于包分类算法的优先级队列,缓存管理几乎也是通过五元组计算来完成的,UDP的特征将会使无状态设备对其做流量管控变得困难。其结果就是,眼睁睁任凭UDP流量挤满各级队列缓存却没有办法将其精确识别出来,即便是BBR遇到了UDP流量,也只能自降pacing rate而兴叹。运营商对TCP更加友好,对UDP不友好,但却无力深度检测TCP连接的真实性。一个简单的例子就是将正常TCP数据的protocol字段改成UDP,丢包率大大增加了,甚至根本无法通信!if (iph->protocol == IPPROTO_TCP) { iph->protocol = IPPROTO_UDP; ip_send_check(iph); udph->check = 0; } else if (iph->protocol == IPPROTO_UDP) { iph->protocol = IPPROTO_TCP; ip_send_check(iph); }加速器原理加速器的原理很简单,就是UDP代理,主要难在两点,其一是怎么处理游戏客户端到加速器服务器之间的UDP连接,其二是怎么让游戏客户端去连接这个加速器(一般游戏客户端是没有设置代理服务器的功能的)处理UDP处理UDP有两种思路,一种是协议套娃,将游戏的UDP包外面套一层TCP(UDP over TCP ),到了目的地再把TCP解包成UDP,最后在发送到游戏服务器,返回的数据包也做同样处理;另外一种是伪造TCP(FakeTCP),对UDP数据包加上伪造的TCP包头,让其看起来像是TCP协议,欺骗运营商。UDP over TCPUDP over TCP 或者 UDP in TCP都是一回事,就是把UDP协议封装到TCP协议里。其缺点是会影响UDP传输的速率和实时性,因为TCP有可靠传输、拥塞控制、按序到达等特性,这些特性都是会牺牲速率和实时性且无法避免掉的:如果网络很好不丢包,那么UDP in TCP方案会工作得很好;如果网路稍微有一点丢包,数据包的延迟会极大得增加。 (按序到达造成的副作用)如果带宽充足,UDP in TCP方案也会工作得很好;如果UDP数据发送的数据一但超过了TCP的带宽,连接就会卡住一段时间,有时候会造成超过10秒的时间无法发送数据。(可靠传输、拥塞控制造成的副作用)原理如下图所示常见项目:https://github.com/mullvad/udp-over-tcp$$R中的udp in tcp选项v2ray中的VMess协议也是支持ucp over tcpFakeTCP用raw socket给UDP协议直接加上伪造的TCP包头,把UDP伪装成TCP;本质上还是UDP,不需要经过系统的TCP协议栈,所以不会有UCP over TCP引入的问题。但是伪装成TCP的UDP流量可以骗过运营商的防火墙,可以避免UDP断流。这就是FakeTCP。原理如下图FakeTCP跟UDP over TCP方案相比的缺点是无法穿透TCP代理(包括反向TCP代理),比如Haproxy。常见项目:udp2raw:https://github.com/wangyu-/udp2raw游戏客户端连接加速器SSTapSSTap全称SOCKSTap, 是一款使用虚拟网卡在网络层实现的转发工具。 SSTap能在网络层拦截全部连接并转发给HTTP、SOCKS4/5。 而无需对被代办的应用程序做任何修改或设置。 它能同时转发TCP、UDP数据包。SSTap会在电脑中安装一个虚拟网卡,配合网络规则(比如哪些IP走这个虚拟网卡,哪些不走)然后在配置路由表中添加如下规则(cmd中netstat -nr可查看)网络目标 网络掩码 网关 接口 跃点数 0.0.0.0 0.0.0.0 10.198.75.61 10.198.75.60 2 0.0.0.0 128.0.0.0 10.198.75.61 10.198.75.60 210.198.75.60即为上面设置的虚拟网卡的IP,如果网络规则设置的全局,那就是真全局(接管系统中所有程序的UDP/TCP流量),包括系统CMD命令都会被代理到,如下实测,当不开启SStap时,百度能ping通,开启时,全部超时(因为我的梯子屏蔽了百度)C:\Users\xxx>ping www.baidu.com 正在 Ping www.a.shifen.com [110.242.68.4] 具有 32 字节的数据: 来自 110.242.68.4 的回复: 字节=32 时间=36ms TTL=53 来自 110.242.68.4 的回复: 字节=32 时间=36ms TTL=53 来自 110.242.68.4 的回复: 字节=32 时间=36ms TTL=53 来自 110.242.68.4 的回复: 字节=32 时间=36ms TTL=53 110.242.68.4 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 36ms,最长 = 36ms,平均 = 36ms # 开启SStap之后ping百度 C:\Users\xxx>ping www.baidu.com 正在 Ping www.baidu.com [110.242.68.3] 具有 32 字节的数据: 请求超时。 请求超时。 请求超时。 请求超时。 110.242.68.3 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),然后在2017年,作者声称硬盘损坏,数据丢失,现已停止开发。所以后续不会再有更新了,未来也许会不可用。但是现在(2021)依然可用各历史版本收藏:https://github.com/solikethis/SSTap-backup备用链接: https://sabrinathings.lanzous.com/b01hin52h官网:https://www.sockscap64.com/sstap-享受游戏-使用sstap/Netch一款可代替SStap的开源网游加速工具,众所周知的游戏加速工具SStap已于2017年年11月19日停止开发及维护,虽然停止了维护与开发,时至今日,其依然是一款热门的游戏加速工具。但是由于年久失修,已经难以适应部分新出的网络游戏,可能会被新出的游戏认定为外挂程序。不同于SSTap那样需要通过添加规则来实现黑名单代理,Netch原理更类似Sockscap64,通过扫描游戏目录获得需要代理的进程名进行代理。与此同时Netch避免了SSTap的NAT问题,使用SSTap加速部分P2P联机,对NAT类型有要求的游戏时,可能会因为NAT类型严格遇到无法加入联机,或者其他影响游戏体验的情况。项目地址:https://github.com/netchx/netch实现实现主要说明基于UDP over TCP的实现,主要原因为在已有nginx + websocket的环境下改动最小,不用打开额外UDP端口,因为其本质是TCP,保证现存环境的稳定性,如果引入FakeTCP,则必须打开新的UDP端口,引入新的不确定性。基于UDP over TCP的实现主要方案为nginx + tls + websocks + vmess,整个连接过程如下图所示环境概述:服务端已配置好标准https站点(nginx接入,端口为标准443,证书正常未过期)服务端配置v2ray,使用vmess协议,其默认支持UDP over TCP方案客户端使用v2rayN,在本地电脑打开socks代理,供浏览器等使用客户端使用SStap,连接v2rayN开在本地的socks代理,在网络层添加虚拟网卡,供所有联网程序使用以下为详细步骤服务端:搭建标准https站点买域名、买VPS这些过程就不赘述了,主要说明标准https站点的作用是防止流量特征被探测,因为对防火墙来说这就是普通的浏览网站的流量,我们的代理程序藏在https后也会被认为是https流量,每天从防火墙经过的https流量是海量的,所以很安全。站点使用nginx搭建,证书使用certbot-nginx自动添加免费证书(三个月过期一次)安装过程不赘述,认证的时候使用如下命令根据提示完成域名认证即可/usr/bin/certbot --nginx --register-unsafely-without-email主要说一下nginx的配置,需要将指定路径下的流量转发给v2ray,此处以/ray为例,这个路径是随机的,保持客户端和服务端配置一致即可erver { listen 443 ssl; ssl on; ssl_certificate /etc/v2ray/v2ray.crt; ssl_certificate_key /etc/v2ray/v2ray.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; server_name mydomain.me; # 与 V2Ray 配置中的 path 保持一致 location /ray { proxy_redirect off; #假设WebSocket监听在环回地址的10000端口上 proxy_pass http://127.0.0.1:10000; # 升级websocket proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; # Show realip in v2ray access.log proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }服务端:配置Vmessv2ray配置主要参考:https://toutyrater.github.io/advanced/wss_and_web.html下载v2ray程序后使用如下配置启动:v2ray -config /path/to/config.json入站流量:即为Nginx转发过来的流量,此时TLS证书已在Nginx卸载,得到的是明文数据,注意路径/ray要和nginx对应出站流量:出站不设限制{ "inbounds": [ { "port": 10000, "listen":"127.0.0.1",//只监听 127.0.0.1,避免除本机外的机器探测到开放了 10000 端口 "protocol": "vmess", "settings": { "clients": [ { "id": "b831381d-6324-4d53-ad4f-8cda48b30811", "alterId": 64 } ] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/ray" } } } ], "outbounds": [ { "protocol": "freedom", "settings": {} } ] }此时,如果访问https://mydomain.me/ray得到一个Bad Request说明服务端成功客户端:配置v2rayNhttps://github.com/2dust/v2rayN/releasesv2rayN是v2ray一个HUI客户端,v2ray本身即可作为服务端也可作为客户端,所以这这是套壳,并且这种模式下,客户端程序会有很多,都是套壳而已,客户端参考:https://www.v2ray.com/awesome/tools.html客户端配置入站流量:监听本地1080端口,所有使用该端口的流量都转发给outbounds出站流量:以https的形式转发给上文配置的服务端,注意路径/ray需和上文一致{ "inbounds": [ { "port": 10808, "listen": "127.0.0.1", "protocol": "socks", "sniffing": { "enabled": true, "destOverride": ["http", "tls"] }, "settings": { "auth": "noauth", "udp": false } } ], "outbounds": [ { "protocol": "vmess", "settings": { "vnext": [ { "address": "mydomain.me", "port": 443, "users": [ { "id": "b831381d-6324-4d53-ad4f-8cda48b30811", "alterId": 64 } ] } ] }, "streamSettings": { "network": "ws", "security": "tls", "wsSettings": { "path": "/ray" } } } ] }如果手动填写参考如下,特别需要注意红框中的字段需要与服务端一致!此时,在127.0.0.1接口10808端口上已经启动监听,将浏览器代理设置成这个端口可以禾目学上网了,注意VMess协议要求客户端和服务端的时间相差不能超过90s,如果连不上,请先检查下时间是否一致。客户端:配置SStap打开SStap,手动添加一个SOCKS5代理,如下图所示点击下方小齿轮设置勾选掉不转发UDP和代理DNS服务器然后打开游戏,最后在进入游戏界面以后点击链接,点击右侧闪电图标测试,右侧如果现实TCP和UDP通过说明连接成功(图中接收包失败是因为我的服务器屏蔽了百度,而SStap会用百度作为链接测试)最后如果能顺利进入游戏说明加速成功!下图右侧为游戏服务器IP检测程序输出结果,左侧为v2rayN日志,结合起来可以看出游戏服务器无论TCP协议还是UDP协议都已经被代理了!游戏服务器IP检测程序:https://github.com/oooldtoy/SSTAP_ip_crawl_tool客户端:SStap规则配置由于SStap年久失修,很多新出的游戏规则没有,所以需要自行制作,可以通过工具:SSTAP_ip_crawl_tool,原理也很简单,通过指定进程,然后检测该进程的所有对外部发出的TCP和UDP连接,取出服务器IP,然后自动生成SStap规则项目地址:https://github.com/oooldtoy/SSTAP_ip_crawl_tool源码是由python写成,嫌麻烦可以直接使用打包好的exe版本:https://github.com/oooldtoy/SSTAP_ip_crawl_tool/releases/download/v4.0/ip_crawl_tool.v4.0.exe输入相关信息后多玩一会儿游戏即可抓取IP最后生成的规则在程序所在目录,如下生成为ItTakesTwo.exe游戏的规则,最后将规则添加到SStap即可#none,['ItTakesTwo.exe'],0,0,1,0,1,0,By-ip_crawl_tool 239.255.255.0/24 159.153.36.0/24 159.153.42.0/24 109.200.221.0/24 109.200.215.0/24 185.50.104.0/24 52.88.180.0/24 255.255.255.0/24Vless早在2020一月份的时候Vmess就爆出严重漏洞,几乎要重新设计Vmess协议Update: 我们构造出了更具杀伤性的PoC,仅需16次探测即可准确判定vmess服务,误报可能性几乎为0,校验的缓解措施均无效。唯一的解决方案是禁用vmess或者重新设计协议。我们决定提高issue的严重性等级。Update:v4.23.4及以后已经采取随机读取多个字节的方式阻止P的侧信道泄漏,目前下面的PoC(16次探测)以及概率探测(暴力发包探测)的PoC已经失效,无法准确探测vmess服务。但是,由于这是协议设计层面的问题,彻底解决问题需要引入AEAD等无法向下兼容的设计。好消息是,这一缓解可以为我们讨论制订新协议争取非常多的时间。vmess+tcp的组合仍然存在一定风险,不建议使用。但是这个漏洞对TLS + Vmess其实并不影响(不影响我们上文的方案),影响的是Vmess + TCP,区别就是是否将加密机制交由TLS来做,不交给TLS则需要自己实现一套加密机制,Vmess就是这样做的。所以社区重新设计了Vless协议,下面这段话我觉得很有意义,所以全部贴过来了什么是 “基于 TLS 设计” ?指的是将 TLS 作为新协议的必要底层传输方式,但千万不要理解成要改造 TLS 本身不一定是直接基于 TLS,可以选择性加一层 Websocket/Http2/Http3相对于现在的方案,新协议有什么优点?与时俱进的安全性:大多数安全性问题已由 TLSv1.3 解决,且 TLS 不会止步 1.3 —— 每当有新的潜在安全性问题出现时,TLS 将会升级,而新协议几乎无需做出改变就可以从中受益。此外,服务端都有路径分流,可以彻底解决被主动探测的问题。简单与纯粹:协议本身只需设计身份认证等功能,以及在一定程度上混淆流量以防止基于机器学习的流量分类(所以不能直接用明文/Socks5)。而不用像现在的 VMess 一样绞尽脑汁防攻击、额外加密。比起来重新设计 VMess,设计这个新协议会简单很多。长期隐蔽:如今互联网上 TLS 已成为主流,新协议的流量可以混于其中,而不像裸 VMess、SS 等特立独行 —— 长期以来这些协议无论怎么设计/修复,始终是在“创造特征”,而墙早已学会了识别特征并封锁。继续这样你来我往毫无意义,远不如直接用 TLS 作底层,相对一劳永逸。自己在 TCP 上设计协议,注重加密和防各种攻击是少不了的(这部分性能始终要损失),而 TLSv1.3 本来就是一种最佳实践(如必须的 AEAD 加密改进),所以不如直接用 TLS 以减少特征、减轻心智负担。为什么当初没有直接这样设计?VMess 出现于 2015 年(Shadowsocks 则更早),那时互联网上 TLS 并不普及,TLSv1.3 也未正式推出。但现在是 2020 年,TLS 已成为主流,TLSv1.3 也足够安全并被广泛应用了,所以我认为目前及以后套 TLS 才是最佳选择与长久之计。在新协议被设计出来之前,尚有安全的 VMess+WSS 可用,只是多余的特性会损失些性能。当然,VMess+WSS 已经是多数选择了,也证明了基于 TLS 的可靠性。可以先关闭 VMess 自带加密 v2ray/discussion#686其它一些话个人认为,非 TLS 方案都应该被淘汰,不要再浪费时间了。就像我说过的,很多人直到 2020 年都还没有抓住重点:从 SS 到 SSR 再到 VMess,总是想着直接在 TCP 上设计协议,却没有一个能长久。未来不属于自己研究了一个在纯 TCP/UDP 上就多么安全的协议:自创的方案,安全性难以比拟顶级学者设计出的 TLS 不说,不广泛使用,无论怎么设计都容易被针对。就算哪天设计出了密码学上的安全性超越了 TLS 的方案,只有 fq 的人用,也是分分钟被针对/被机器学习特征,没有任何意义。方向错了,做的就是无用功。v2ray/discussion#7112020-06-02 更新:对于 VMess 2 的设计,不反对,可以同时进行有人觉得基于纯 TCP/UDP 的协议也安全可靠,那想用就用希望看到更多基于 TLS 的协议(或者说不同的流量混淆方案其它地方已经有类似的方案,我相信基于 TLS 设计协议正在成为主流方向V2Ray ≠ VMess,V2Ray 的初衷应该是与时俱进,而不是死守一种方案毕竟,我们为了 fq 而设计的这些土制协议,有非基于纯 TCP 不可的原因吗?想要使用Vless很简单,最新版的V2ray已经支持该协议(2021-11-21当前版本4.43.0)服务端如下设置VLESS 是一个无状态的轻量传输协议,它分为入站和出站两部分,可以作为 V2Ray 客户端和服务器之间的桥梁。与 VMess 不同,VLESS 不依赖于系统时间,认证方式同样为 UUID,但不需要 alterId。{ "inbounds": [ { "port": 10000, "listen":"127.0.0.1", "protocol": "vless", "settings": { //注意加上这句 "decryption":"none", "clients": [ { "id": "7b5407b1-e1d9-49f7-a66b-6283deb4eb62", //不需要alterId "level": 0 } ] }, "streamSettings": { "network": "ws", "wsSettings": { "path": "/ray-vless" } } } ], "outbounds": [ { "protocol": "freedom", "settings": {} } ] }客户端(v2rayN)设置如下参考https://www.cnblogs.com/crazytomato/p/7987332.htmlhttps://blog.csdn.net/dog250/article/details/113706995https://tachyondevel.medium.com/教程-在-windows-上使用-tun2socks-进行全局代理-aa51869dd0dhttps://toutyrater.github.io/advanced/wss_and_web.htmlhttps://github.com/oooldtoy/SSTAP_ip_crawl_tool
2024年08月30日
17 阅读
0 评论
0 点赞
2024-08-24
理解 Anki 基础概念
在尝试了 Anki 、 SuperMemo 、 Quizlet 和 Memrise 之后,最后选用了 Anki。Anki 是一个卡片记忆系统,基于 SuperMemo 老版的 SM2 算法,在实用性和有效性方面做了很好的平衡。简洁的界面,全平台免费同步,用 HTML 和 CSS 做模板,导入导出非常灵活,很适合程序员使用。Anki 跟其它几个系统一样,都引入了自身的一套理念,不理解的话用起来就会无从下手。看了官方的文档后,解决了很多疑惑和误解,并试图在本文用自己的理解总结一遍。但这篇文章不是操作说明书,如何操作这个网上已经有很多中文资料和视频,就不重复劳动了。可以把 Anki 的使用分成四个步骤: 得到问题 录入数据 使用卡片 循环记忆 主要需要理解前两个。得到问题把想要记忆的材料整理出一道道“问题-答案”对,参照 SuperMemo 的 20 条规则。这些规则核心的概念是1、先理解再记忆。4、最小信息原则。这个规则与 9、避免使用集合和 10、避免使用枚举都是一个道理:保证每次的答案都是固定的,不一定是一模一样,但必须是有固定的顺序,且尽可能的细化,这样可以减少无必要的记忆负担,提高重复记忆的效果。6、使用图像、 7、使用思维导图和 14、私人化定制例子 提到了耳熟能详的右脑记忆和联想记忆。5、填空题 以及变种 8、图像填空题提到了填空题的好处。Anki 有自己的一套方式录入填空题,后面会提到。录入数据2020年6月3日 更新:沙拉查词已支持自动 Anki 制卡,欢迎使用。录入数据最常用的方法就是在软件的上一条条的填入,但 Anki 提供了更方便的导入方式,结合 HTML 可以更灵活地控制显示方式。但必须注意,导入功能不是为了方便直接使用别人分享的数据;根据先理解再记忆的原则,最好还是手动用文本记录好,然后利用文本编辑器或者编写脚本批量添加样式,最后导入到 Anki 里。在录入之前需要理解 Anki 数据的一些概念:Anki 一个最大的亮点就是“用户负责录入数据,Anki 负责生成卡片”。这也是我一开始没有注意并误解了的地方。Anki 将数据和卡片分开提供了巨大的灵活性,可以用一组数据产生不同的卡片。Cards 和 DecksCards 就是卡片,每张卡片包含了正面和背面,一般正面会放问题,背面放问题和答案,但都是可以改的,很灵活。Decks 就是牌组,卡片放牌组里面,牌组也可以放牌组里面,方便分类整理,用 :: 分隔。Notes 和 FieldsAnki 中的数据主要分为 Notes(记录) 和 Fields(字段)。如果把数据看成表格,字段就是表格的表头,代表了都有什么类型的数据,一条记录就是一组数据,包含了每种字段的一个取值。使用文本导入时,文本里的一行就是一条记录,每条记录里面的各个字段用分隔符分隔。分隔符可以是逗号、分号或 tab ,Anki 会以第一条记录判断用什么分隔符,并判断有多少个字段。而字段的名称最后在要导入的那个牌组上面设置。比如记忆英文,可以有三个字段:英文、中文、例句,文本中的一行记录就可以是:Apple; 苹果; I love apple. 。这里就代表了:英文: Apple 中文: 苹果 例句:I love apple.这样的好处就是可以非常灵活地生成卡片。比如可以将英文作为卡片正面,将中文和例句放在背面;也可以将中文放在正面,英文和例句放在背面。非常的方便。得到了数据以后,就可以对卡片的样式和类型进行调整。Card Types可以将一套卡片统一成一个类型,然后对这个类型套用一个模板去显示。Note Types卡片的类型也是可以很方便修改,这个视频除了介绍添加答案输入,后面还提到了如何改成填空题理解了这些基本概念就可以开始使用 Anki 了,遇到了其它问题可以查文档、视频、支持和中文论坛。
2024年08月24日
29 阅读
0 评论
0 点赞
1
...
57
58
59
...
125