Witajcie. Mam taki kawałek kodu:
if (chckbxUseProxy.isSelected()) {
//odczytywanie listy serwerów proxy z pliku Proxy.txt
List<String> proxyList = new ArrayList<String>();
try {
proxyList = Files.readAllLines(Paths.get("Proxy.txt", new String[0]), StandardCharsets.UTF_8);
} catch (IOException ex) {
JOptionPane.showMessageDialog(null, "Plik Proxy.txt nie został znaleziony! \nAby korzystać z proxy utwórz w tej samej lokalizacji \nw której się znajduje aplikacja plik Proxy.txt zawierający listę \nserwerów Proxy w formacie host:port jeden serwer na jedną linię!", "Błąd!" , JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
//stara metoda z zamianą array na index... nie wiem po co.
//String[] proxyMap = (String[]) proxyList.toArray(new String[0]);
for (int i = 0; i < Threads; i++) {
String[] ProxyIpAndPort = proxyList.get(i).split(":");
//poniżej wybór typu proxy
Proxy PROXY = null;
Proxy AUTH_PROXY = null;
if(proxyType.getSelectedIndex() == 0) {
PROXY = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(ProxyIpAndPort[0], Integer.parseInt(ProxyIpAndPort[1])));
AUTH_PROXY = PROXY;
} else if(proxyType.getSelectedIndex() == 1) {
PROXY = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(ProxyIpAndPort[0], Integer.parseInt(ProxyIpAndPort[1])));
AUTH_PROXY = PROXY;
}
//przygotowywanie botów przez proxy
runners[i] = new login(i, IpPort[0], Integer.valueOf(IpPort[1]).intValue(), PROXY, AUTH_PROXY, line, OneTime, Loop, Integer.valueOf(OneTimeDelay.getText()), Integer.valueOf(LoopDelay.getText()));
}
} else {
for (int i = 0; i < Threads; i++) {
//przygotowywanie botów bez proxy
runners[i] = new login(i, IpPort[0], Integer.valueOf(IpPort[1]).intValue(), Proxy.NO_PROXY, Proxy.NO_PROXY, line, OneTime, Loop, Integer.valueOf(OneTimeDelay.getText()), Integer.valueOf(LoopDelay.getText()));
}
}
Zawartość klasy login:
package me.przemovi;
import java.net.Proxy;
import com.github.steveice10.mc.protocol.MinecraftConstants;
import com.github.steveice10.mc.protocol.MinecraftProtocol;
import com.github.steveice10.mc.protocol.packet.ingame.client.ClientChatPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
import com.github.steveice10.packetlib.Client;
import com.github.steveice10.packetlib.event.session.DisconnectedEvent;
import com.github.steveice10.packetlib.event.session.PacketReceivedEvent;
import com.github.steveice10.packetlib.event.session.SessionAdapter;
import com.github.steveice10.packetlib.tcp.TcpSessionFactory;
public class login implements Runnable {
private static String HOST = "127.0.0.1";
private static int PORT = 25565;
private static Proxy PROXY = Proxy.NO_PROXY;
private static Proxy AUTH_PROXY = Proxy.NO_PROXY;
private static String[] line = null;
private int id;
private static String[] OneTime = null;
private static String[] Loop = null;
private static int OneTimeDelay = 100;
private static int LoopDelay = 100;
private static boolean LetSpam = false;
public login(int id, String HST, int PRT, Proxy PRX, Proxy Auth_PRX, String[] l, String[] O, String[] L, int OTD,
int LD) {
HOST = HST;
PORT = PRT;
PROXY = PRX;
AUTH_PROXY = Auth_PRX;
this.id = id;
line = l;
OneTime = O;
Loop = L;
OneTimeDelay = OTD;
LoopDelay = LD;
}
@Override
public void run() {
MinecraftProtocol protocol = null;
protocol = new MinecraftProtocol(line[id]);
Client client = new Client(HOST, PORT, protocol, new TcpSessionFactory(PROXY));
client.getSession().setFlag(MinecraftConstants.AUTH_PROXY_KEY, AUTH_PROXY);
client.getSession().addListener(new SessionAdapter() {
@Override
public void packetReceived(PacketReceivedEvent event) {
if (event.getPacket() instanceof ServerJoinGamePacket) {
LetSpam = true;
}
}
@Override
public void disconnected(DisconnectedEvent event) {
/*System.out.println("Disconnected: " + Message.fromString(event.getReason()).getFullText());*/
if (event.getCause() != null) {
bot.printToOut("Bot" + id + ":" + " disconnected: " + event.getCause().toString());
} else {
bot.printToOut("Bot" + id + ":" + " disconnected!");
}
bot.interruptThread(id);
}
});
client.getSession().connect();
bot.printToOut("Bot" + id + ":" + " joined!");
while (true) {
if (LetSpam) {
if (OneTime != null) {
for (int i = 0; indexExists(OneTime, i); i++) {
try {
Thread.sleep(OneTimeDelay);
} catch (InterruptedException e) {
// e.printStackTrace();
client.getSession().disconnect("");
bot.printToOut("Bot" + id + ":" + " disconnected!");
return;
}
client.getSession().send(new ClientChatPacket(OneTime[i]));
bot.printToOut("Bot" + id + OneTime[i]);
}
}
if (Loop != null) {
while (!(Thread.interrupted())) {
for (int i = 0; indexExists(Loop, i); i++) {
try {
Thread.sleep(LoopDelay);
} catch (InterruptedException e) {
// e.printStackTrace();
client.getSession().disconnect("");
bot.printToOut("Bot" + id + ":" + " disconnected!");
return;
}
client.getSession().send(new ClientChatPacket(Loop[i]));
bot.printToOut("Bot" + id + Loop[i]);
}
}
} else {
while (!(Thread.interrupted())) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// e.printStackTrace();
client.getSession().disconnect("");
bot.printToOut("Bot" + id + ":" + " disconnected!");
return;
}
}
}
} else {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// e.printStackTrace();
client.getSession().disconnect("");
bot.printToOut("Bot" + id + ":" + " disconnected!");
return;
}
}
}
}
public static boolean indexExists(String[] array, int index) {
return (array != null) && (index >= 0) && (index < array.length);
}
}
problem jest taki, że ustawiam sobie w interfejsie, że chce korzystać z proxy, aplikacja wczytuje serwery z listy i łączy się przez nie. Tak przynajmniej powinno to wyglądać w założeniu. Praktycznie to w ogóle pakiety wysyłane przez aplikację nie docierają do serwera. Podejrzewam, że robie jakiś głupi błąd. Pomysły, jak go rozwiązać? Dodam, że próbowałem i na proxy SOCKS i na HTML. Proxy brałem z tąd: http://proxydb.net/?protocol=socks4