mirror of
https://github.com/ViaVersion/VIAaaS.git
synced 2025-01-24 22:01:49 +01:00
SOCKS5 proxy, implement #100
This commit is contained in:
parent
e73175b7c5
commit
14e5ae62bc
@ -40,4 +40,7 @@ object VIAaaSConfig : Config(File("config/viaaas.yml")) {
|
||||
val rateLimitWs: Double get() = this.getDouble("rate-limit-ws", 1.0)
|
||||
val rateLimitConnectionMc: Double get() = this.getDouble("rate-limit-connection-mc", 10.0)
|
||||
val listeningWsLimit: Int get() = this.getInt("listening-ws-limit", 16)
|
||||
val backendSocks5ProxyAddress: String?
|
||||
get() = this.getString("backend-socks5-proxy-address", "")!!.let { if (it.isEmpty()) null else it }
|
||||
val backendSocks5ProxyPort: Int get() = this.getInt("backend-socks5-proxy-port", 9050)
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ class BackEndInit(val connectionData: ConnectionData) : ChannelInitializer<Chann
|
||||
override fun initChannel(ch: Channel) {
|
||||
val user = UserConnection(ch, true)
|
||||
ProtocolPipeline(user)
|
||||
ch.pipeline()
|
||||
ch.pipeline().also { addSocks5(it) }
|
||||
// "crypto"
|
||||
.addLast("frame", FrameCodec())
|
||||
// compress
|
||||
|
@ -1,11 +1,22 @@
|
||||
package com.github.creeper123123321.viaaas.handler
|
||||
|
||||
import com.github.creeper123123321.viaaas.config.VIAaaSConfig
|
||||
import com.github.creeper123123321.viaaas.packet.Packet
|
||||
import com.github.creeper123123321.viaaas.send
|
||||
import io.netty.channel.ChannelPipeline
|
||||
import io.netty.handler.proxy.Socks5ProxyHandler
|
||||
import us.myles.ViaVersion.api.protocol.ProtocolVersion
|
||||
import java.net.InetSocketAddress
|
||||
|
||||
fun forward(handler: MinecraftHandler, packet: Packet, flush: Boolean = false) {
|
||||
send(handler.other!!, packet, flush)
|
||||
}
|
||||
|
||||
fun is1_7(handler: MinecraftHandler) = handler.data.frontVer!! <= ProtocolVersion.v1_7_6.version
|
||||
fun is1_7(handler: MinecraftHandler) = handler.data.frontVer!! <= ProtocolVersion.v1_7_6.version
|
||||
|
||||
fun addSocks5(pipe: ChannelPipeline) {
|
||||
val addr = VIAaaSConfig.backendSocks5ProxyAddress
|
||||
if (addr != null) {
|
||||
pipe.addFirst(Socks5ProxyHandler(InetSocketAddress(addr, VIAaaSConfig.backendSocks5ProxyPort)))
|
||||
}
|
||||
}
|
@ -6,23 +6,26 @@ import com.github.creeper123123321.viaaas.codec.FrameCodec
|
||||
import com.github.creeper123123321.viaaas.codec.MinecraftCodec
|
||||
import com.github.creeper123123321.viaaas.handler.ConnectionData
|
||||
import com.github.creeper123123321.viaaas.handler.MinecraftHandler
|
||||
import com.github.creeper123123321.viaaas.packet.handshake.Handshake
|
||||
import com.github.creeper123123321.viaaas.handler.addSocks5
|
||||
import com.github.creeper123123321.viaaas.mcLogger
|
||||
import com.github.creeper123123321.viaaas.packet.handshake.Handshake
|
||||
import com.github.creeper123123321.viaaas.packet.status.StatusRequest
|
||||
import com.github.creeper123123321.viaaas.send
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import java.net.InetSocketAddress
|
||||
import us.myles.ViaVersion.api.protocol.ProtocolVersion
|
||||
import io.netty.handler.timeout.ReadTimeoutHandler
|
||||
import io.netty.channel.socket.nio.NioSocketChannel
|
||||
import com.google.common.cache.CacheLoader
|
||||
import java.util.concurrent.TimeUnit
|
||||
import com.google.common.cache.CacheBuilder
|
||||
import com.google.common.cache.CacheLoader
|
||||
import io.netty.bootstrap.Bootstrap
|
||||
import io.netty.channel.*
|
||||
import io.netty.channel.Channel
|
||||
import io.netty.channel.ChannelFuture
|
||||
import io.netty.channel.ChannelInitializer
|
||||
import io.netty.channel.ChannelOption
|
||||
import io.netty.handler.timeout.ReadTimeoutHandler
|
||||
import io.netty.util.concurrent.Future
|
||||
import us.myles.ViaVersion.api.protocol.ProtocolVersion
|
||||
import us.myles.ViaVersion.packets.State
|
||||
import java.net.InetSocketAddress
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import java.util.concurrent.ExecutionException
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
object ProtocolDetector {
|
||||
private val SERVER_VER = CacheBuilder.newBuilder()
|
||||
@ -38,7 +41,7 @@ object ProtocolDetector {
|
||||
.handler(object : ChannelInitializer<Channel>() {
|
||||
override fun initChannel(channel: Channel) {
|
||||
val data = ConnectionData(channel, state = ProtocolDetectionState(future), frontVer = -1)
|
||||
channel.pipeline()
|
||||
channel.pipeline().also { addSocks5(it) }
|
||||
.addLast("timeout", ReadTimeoutHandler(30, TimeUnit.SECONDS))
|
||||
.addLast("frame", FrameCodec())
|
||||
.addLast("mc", MinecraftCodec())
|
||||
|
@ -12,6 +12,10 @@ port: 25565
|
||||
bind-address: localhost
|
||||
# Use Netty native transport for Minecraft connections when available.
|
||||
native-transport-mc: true
|
||||
# Address of SOCKS5 proxy used for connecting to backend servers. Empty to disable.
|
||||
backend-socks5-proxy-address: ""
|
||||
# Port of SOCKS5 proxy used for connecting to backend servers.
|
||||
backend-socks5-proxy-port: 9050
|
||||
#
|
||||
######
|
||||
# Crypto
|
||||
|
Loading…
Reference in New Issue
Block a user