Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-12-27 08:30:12 +01:00
Implement ViaProxy client IP passthrough (#5202)
Dieser Commit ist enthalten in:
Ursprung
2019e53bad
Commit
1fea22d980
@ -24,15 +24,19 @@
|
|||||||
*/
|
*/
|
||||||
package org.geysermc.geyser.platform.viaproxy;
|
package org.geysermc.geyser.platform.viaproxy;
|
||||||
|
|
||||||
|
import io.netty.channel.AbstractChannel;
|
||||||
import net.lenni0451.lambdaevents.EventHandler;
|
import net.lenni0451.lambdaevents.EventHandler;
|
||||||
|
import net.lenni0451.reflect.stream.RStream;
|
||||||
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
|
import net.raphimc.vialegacy.api.LegacyProtocolVersion;
|
||||||
import net.raphimc.viaproxy.ViaProxy;
|
import net.raphimc.viaproxy.ViaProxy;
|
||||||
import net.raphimc.viaproxy.plugins.PluginManager;
|
import net.raphimc.viaproxy.plugins.PluginManager;
|
||||||
import net.raphimc.viaproxy.plugins.ViaProxyPlugin;
|
import net.raphimc.viaproxy.plugins.ViaProxyPlugin;
|
||||||
|
import net.raphimc.viaproxy.plugins.events.Client2ProxyChannelInitializeEvent;
|
||||||
import net.raphimc.viaproxy.plugins.events.ConsoleCommandEvent;
|
import net.raphimc.viaproxy.plugins.events.ConsoleCommandEvent;
|
||||||
import net.raphimc.viaproxy.plugins.events.ProxyStartEvent;
|
import net.raphimc.viaproxy.plugins.events.ProxyStartEvent;
|
||||||
import net.raphimc.viaproxy.plugins.events.ProxyStopEvent;
|
import net.raphimc.viaproxy.plugins.events.ProxyStopEvent;
|
||||||
import net.raphimc.viaproxy.plugins.events.ShouldVerifyOnlineModeEvent;
|
import net.raphimc.viaproxy.plugins.events.ShouldVerifyOnlineModeEvent;
|
||||||
|
import net.raphimc.viaproxy.plugins.events.types.ITyped;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.geysermc.geyser.GeyserBootstrap;
|
import org.geysermc.geyser.GeyserBootstrap;
|
||||||
@ -56,6 +60,7 @@ import org.geysermc.geyser.util.LoopbackUtil;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
import java.net.SocketAddress;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -109,6 +114,27 @@ public class GeyserViaProxyPlugin extends ViaProxyPlugin implements GeyserBootst
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
private void onClient2ProxyChannelInitialize(Client2ProxyChannelInitializeEvent event) {
|
||||||
|
if (event.getType() != ITyped.Type.POST || event.isLegacyPassthrough()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (System.getProperty("geyser.viaproxy.disableIpPassthrough") != null) { // Temporary until Configurate branch is merged
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final GeyserSession session = GeyserImpl.getInstance().onlineConnections().stream()
|
||||||
|
.filter(c -> c.getDownstream() != null)
|
||||||
|
.filter(c -> c.getDownstream().getSession().getLocalAddress().equals(event.getChannel().remoteAddress()))
|
||||||
|
.findAny().orElse(null);
|
||||||
|
if (session != null) {
|
||||||
|
final SocketAddress realAddress = session.getSocketAddress();
|
||||||
|
if (event.getChannel() instanceof AbstractChannel) {
|
||||||
|
RStream.of(AbstractChannel.class, event.getChannel()).fields().by("remoteAddress").set(realAddress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
private void onProxyStart(final ProxyStartEvent event) {
|
private void onProxyStart(final ProxyStartEvent event) {
|
||||||
this.onGeyserEnable();
|
this.onGeyserEnable();
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren