Ir para conteúdo
  • 0

[Resolvido] [BukkitAPI] Bloquear X IP que está na config!


Guest Gostosão do fórum SrKerwin

Pergunta

Guest Gostosão do fórum SrKerwin

Como eu faço para bloquear um IP de entrar no servidor? (e mais.. como eu faço para pegar uma StringList desses IPs?)

Tipo:
 

IPs:
  - "155.155.155.0"
  - "255.255.255.0"
  - "17.35.18.50"
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

Fácil 

 

@SuppressWarnings("deprecation")
	@EventHandler(priority = EventPriority.HIGHEST)
	public void prisaoentra(PlayerPreLoginEvent e) {
            for(String ip : Main.ins.getConfig().getStringList("IPs")){
		if (e.getAddress().equals(ip)) {
                      e.setKickMessage("Falha Ao Conectar Ao Servidor");
          }
      }
}
                     

Fiz aqui mesmo, não testei

Editado por Cuthmf
Link para o comentário
Compartilhar em outros sites

Guest Gostosão do fórum SrKerwin

Fácil 

 

 

@SuppressWarnings("deprecation")
	@EventHandler(priority = EventPriority.HIGHEST)
	public void prisaoentra(PlayerPreLoginEvent e) {
            for(String ip : Main.ins.getConfig().getStringList("IPs")){
		if (e.getAddress().equals(ip)) {
                      e.setKickMessage("Falha Ao Conectar Ao Servidor");
          }
      }
}
                     

Fiz aqui mesmo, não testei

vou testar :p

Link para o comentário
Compartilhar em outros sites

Na classe:

Set<Integer> blockIps;

No onEnable:

blockIps = getConfig().getStringList("ips").stream().map(e -> {
  try {
    return InetAddress.getByName(e);
  } catch (UnknownHostException e1) {
    e1.printStackTrace();
  }
  return null;
}).map(InetAddresses::coerceToInteger).collect(Collectors.toSet());

No evento...

@EventHandler
private void onJoin(AsyncPlayerPreLoginEvent e) {
  Integer intIp = InetAddresses.coerceToInteger(e.getAddress());
  if (blockIps.contains(intIp)) {
    e.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "vc n pode entra");
  }
}

Como o 'contains' do HashSet tem uma performance de O(1) vai ser muito melhor.

 

Eu converti pra Integer mas creio que de pra fazer direto com InetAdress

 

 

 

 

Tbm da assim, acho que deve ser a mesma coisa.

blockIps = new HashSet<>(getConfig().getStringList("ips"));
@EventHandler
private void onJoin(AsyncPlayerPreLoginEvent e) {
  if (blockIps.contains(e.getAddress().getHostAddress())) {
    e.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "vc n pode entra");
  }
}
Editado por leonardosc
Link para o comentário
Compartilhar em outros sites

Guest Gostosão do fórum SrKerwin

 

Na classe:

Set<Integer> blockIps;

No onEnable:

blockIps = getConfig().getStringList("ips").stream().map(e -> {
  try {
    return InetAddress.getByName(e);
  } catch (UnknownHostException e1) {
    e1.printStackTrace();
  }
  return null;
}).map(InetAddresses::coerceToInteger).collect(Collectors.toSet());

No evento...

@EventHandler
private void onJoin(AsyncPlayerPreLoginEvent e) {
  Integer intIp = InetAddresses.coerceToInteger(e.getAddress());
  if (blockIps.contains(intIp)) {
    e.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "vc n pode entra");
  }
}

Como o 'contains' do HashSet tem uma performance de O(1) vai ser muito melhor.

 

Eu converti pra Integer mas creio que de pra fazer direto com InetAdress

 

 

 

 

Tbm da assim, acho que deve ser a mesma coisa.

blockIps = new HashSet<>(getConfig().getStringList("ips"));
@EventHandler
private void onJoin(AsyncPlayerPreLoginEvent e) {
  if (blockIps.contains(e.getAddress().getHostAddress())) {
    e.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "vc n pode entra");
  }
}

Nenhum funcionou.. funciona em qualquer versão? tipo já e o 4º modo que eu faço e não da :'( t.t

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...