frp 反向隧道代理(内网穿透)之协议 “tcp + encryptor”

开源项目:

GitHub - liulilittle/frp: Fast reverse proxy supports UDP/TCP tunnel proxy.

协议支持:SSL流、TLS流、TCP流、加密TCP流、WebSocket 流,等多个类型传输层,可用于海外服务器反代中国大陆家宽设备,故而映射服务到公共网络上。

适配平台:win-x86_32、win-x86_64、linux-s390x、linux-x86_64、linux-aarch64

例程配置:

frp/frp/samples/encryptor at main · liulilittle/frp (github.com)

包含: 

frpc.ini 客户端配置

frps.ini 服务器配置

采用跟工具 “SS” 差别不多的加密方法,例如明确支持的加密方法:

chacha20、chacha20-poly1305

aes-128-gcm、aes-192-gcm、aes-256-gcm

aes-128-cfb、aes-192-cfb、aes-256-cfb

sm4、...

具体可自行参考:OpenSSL 1.1.x EVP加密算法组请清单明细。

反向代理配置 

frpc.ini 客户端配置:

[app]
alignment=4096
mode=client
ip=127.0.0.1
port=7000
backlog=511
fast-open=true
turbo.lan=true
turbo.wan=true
connect.timeout=10
inactive.timeout=72
protocol=encryptor
protocol.encryptor.method=aes-128-gcm
protocol.encryptor.password=frp

[http]
type=tcp
local-ip=185.207.153.31
local-port=80
remote-port=80

[ssh]
type=tcp
local-ip=192.168.0.24
local-port=22
remote-port=10022

[dns]
type=udp
local-ip=192.168.0.24
local-port=53
remote-port=10053

frps.ini 服务器配置:

[app]
alignment=4096
mode=server
ip=::
port=7000
backlog=511
fast-open=true
turbo.lan=true
turbo.wan=true
connect.timeout=10
inactive.timeout=72
handshake.timeout=5
protocol=encryptor
protocol.encryptor.method=aes-128-gcm
protocol.encryptor.password=frp

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于Spring Boot和WebSocket的Demo,实现了内网穿透和客户端和服务端的API互相访问。 1. 首先,在pom.xml中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> ``` 2. 在application.properties中添加以下配置: ```properties # WebSocket server.port=8080 spring.websocket.path=/ws spring.websocket.max-text-message-size=512000 # Jasypt加密配置 jasypt.encryptor.password=your_password # 内网穿透工具配置 ngrok.server.address=your_ngrok_server_address ngrok.server.port=your_ngrok_server_port ``` 其中,ngrok是一个内网穿透工具,可以将本地服务映射到外网,可以在官网下载并安装使用。 3. 编写WebSocket配置类: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new SocketHandler(), "/ws").setAllowedOrigins("*"); } } ``` 其中,SocketHandler是自定义的WebSocket处理器类。 4. 编写SocketHandler类: ```java @Component public class SocketHandler extends TextWebSocketHandler { private static final Logger logger = LoggerFactory.getLogger(SocketHandler.class); @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { logger.info("Received message: {}", message.getPayload()); // 处理接收到的消息 session.sendMessage(new TextMessage("Hello, " + message.getPayload() + "!")); } } ``` 其中,handleTextMessage方法是处理接收到的WebSocket消息的方法,这里实现了简单的回复功能。 5. 编写客户端和服务端的API接口: ```java @RestController @RequestMapping("/api") public class ApiController { @Autowired private SimpMessagingTemplate messagingTemplate; @PostMapping("/send") public void sendMessage(@RequestParam String message) { messagingTemplate.convertAndSend("/topic/message", message); } @MessageMapping("/message") public void handleMessage(@Payload String message, SimpMessageHeaderAccessor headerAccessor) { messagingTemplate.convertAndSend("/topic/message", message); } } ``` 其中,sendMessage方法是客户端调用的API接口,handleMessage方法是服务端接收WebSocket消息后转发到客户端的方法。 6. 在ngrok上注册一个公共域名,并将其映射到本地服务的地址和端口号。 7. 启动Spring Boot项目并在浏览器中访问ngrok生成的公共域名,即可启动WebSocket连接并实现API互相访问。 以上就是一个基本的Spring Boot和WebSocket实现内网穿透的Demo,可以根据实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值