尝试在windows设置端口转发以及反向代理

最近考虑买一台MacBook Pro,当作新的生产力。但是目前的开发又离不开X86的windows平台,考虑使用mac进行代码开发运行,使用windows进行调试。项目中用到的数据库以及第三方的接口需要使用vpn访问内网,且vpn只能登录一个设备,所以考虑在windows上登录vpn,系统运行需要用到的数据库以及第三方接口都使用windows电脑进行转发。 数据库转发(转发tcp) 我用的是windows自带的portproxy功能 使用以下命令即可实现端口转发 netsh interface portproxy add v4tov4 listenport=[监听端口号] listenaddress=[本地IP地址] connectport=[目标端口号] connectaddress=[目标IP地址] 验证端口转发是否配置成功 netsh interface portproxy show all 如果想删除某个端口转发规则 netsh interface portproxy delete v4tov4 listenport=[监听端口号] listenaddress=[本地IP地址] 第三方接口转发 我使用的是caddy代理,只需要一行命令即可 caddy reverse-proxy --from 本机ip --to 第三方接口的内网ip 踩坑 尝试过让windows登vpn,然后开热点给另一个电脑。经测试另一台电脑连上热点只能访问外网,查资料说windows的个人热点直接走物理网卡转发,不会走代理。 尝试用caddy代理数据库的tcp连接,理论上可以使用caddy的第三方模块实现代理tcp,但是没有研究明白,放弃了,感觉caddy还是代理http请求更合适一些。 结尾 目前只是做了数据库以及第三方接口的代理,等过一段时间买到新电脑了,再继续折腾。生命不息息,折腾不止😂

February 17, 2025 · 1 min · LLP2333

使用Cloudflare WARP 解锁Chatgpt

Chatgpt对ip有较为严格的限制,使用Cloudflare WARP可以隐藏服务器的真实ip,解除访问限制。 安装Cloudflare WARP 官方文档 # Add cloudflare gpg key curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg # Add this repo to your apt repositories echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list # Install sudo apt-get update && sudo apt-get install cloudflare-warp 设置cloudflare warp 一定要把mode设置为proxy,然后连接。否则将无法使用ssh访问服务器。 warp-cli registration new #注册 warp-cli mode proxy # 设置代理模式为socks代理 warp-cli proxy port 40000 #设置代理端口40000 warp-cli connect # 连接 xray配置 inbounds 要开启 sniffing "sniffing": { "enabled": true, "destOverride": ["http", "tls"] } outbounds 增加配置 ...

January 21, 2025 · 1 min · LLP2333

使用sni 代理解决服务器无法直接联网的问题

正式系统无法访问外网,测试系统可以访问外网。正式系统的一个SDK需要向外网发送HTTP请求,考虑使用sni 代理。 软件 gost 参考文档 部署 能联网的测试机使用docker compose部署(设置xxx.com的sni代理白名单,xxx.com前面的表示白名单,不加表示黑名单) services: gost: image: gogost/gost container_name: gost ports: - "80:80" command: -L sni://:80?bypass=~xxx.com restart: unless-stopped 不能联网的正式机配置/etc/hosts 测试机ip xxx.com 我的后端是容器部署的,然后给容器配置/etc/hosts文件映射就可以了 注意 不能在构建docker image时候修改hosts,只能在容器运行时进行映射或者修改。因为构建阶段/etc/hosts是只读的。image是许多只读layer的叠加,而容器是只读layer和可读layer的叠加

January 20, 2025 · 1 min · LLP2333

使用AspectJ拦截第三方SDK请求

最近使用一个第三方的SDK来请求数据,但是请求的服务器对ip有白名单限制,SDK使用的apache的commons-httpclient: 3.1 发送请求。于是尝试使用ApectJ运行时织入,拦截发送HTTP请求的代码,修改参数. 依赖(用的1.9.19版本) <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency> maven插件 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <executions> <execution> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> 切面 import org.apache.commons.httpclient.HttpMethod; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class HttpClientAspect { public static HttpClientAspect aspectOf() { return new HttpClientAspect(); } @Around("execution(* org.apache.commons.httpclient.HttpClient.executeMethod(..))") public Object aroundHttpExecution(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("======================================"); Object[] args = joinPoint.getArgs(); // 获取HttpMethod参数 if (args != null && args.length > 0 && args[0] instanceof HttpMethod) { HttpMethod httpMethod = (HttpMethod) args[0]; // 添加自定义请求头 httpMethod.addRequestHeader("**********", "**********"); // 添加其他需要的请求头 } // 继续执行原方法 return joinPoint.proceed(); } } aop配置(resource:META-INF/aop.xml) <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "https://www.eclipse.org/aspectj/dtd/aspectj.dtd"> <aspectj> <weaver options="-verbose -showWeaveInfo"> <include within="org.apache.commons.httpclient.*"/> </weaver> <aspects> <!-- 指定切面类 --> <aspect name="com.****.aspect.HttpClientAspect"/> </aspects> </aspectj> 运行时参数 -javaagent:"C:\Users\***\aspectjweaver-1.9.19.jar" --add-opens java.base/java.lang=ALL-UNNAMED

January 10, 2025 · 1 min · LLP2333

Java的ResourceBundle读取配置文件路径

当你使用 // 1. 创建或加载 ResourceBundle ResourceBundle bundle = ResourceBundle.getBundle("messages"); // 从 classpath 加载 messages.properties // 2. 使用getString()获取字符串值 String value = bundle.getString("key.name"); 读取文件时 代码默认会读取src/main/resources/messages.properties src/main/resources/messages.properties // 默认 src/main/resources/messages_zh.properties // 中文 src/main/resources/messages_en.properties // 英文 样例配置文件 key.name=值 welcome.message=欢迎 error.code=500 如果想指定读取的文件 // 指定英文 Locale Locale enLocale = new Locale("en"); // 或者直接用 Locale.ENGLISH // 加载英文资源包 ResourceBundle bundle = ResourceBundle.getBundle("messages", enLocale); // 获取英文值 String value = bundle.getString("key.name");

January 8, 2025 · 1 min · LLP2333