Java, problem z łączeniem z proxy.

0

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

0

Napisz krótki kawałek kodu, bez interfejsu użytownika, który pokazuje, że ręcznie skonfigurowane proxy nie działa. Wtedy albo już sam odkryjesz, w czym błąd, albo wyślij tutaj. Jako proxy możesz użyć programu Fiddler. On Ci od razu pokaże, czy coś do niego dotarło.

A może na początek dodaj do swojej konfiguracji lokalne proxy z Fiddlera, może to coś rozjaśni.

0

fiddler nie wykrywa nawet próby nawiązania połączenia przez proces java. Napisałem najprostszy kawałek kodu, próbowałem zmienić z http na socks i odwrotnie i z różnymi serwerami. Bez skutku.

0

Jak próbuję przez HTTP to mam taki błąd:

Disconnected: java.lang.InternalError: Should not reach here
java.lang.InternalError: Should not reach here
at java.net.HttpConnectSocketImpl.doTunneling(Unknown Source)
at java.net.HttpConnectSocketImpl.doTunnel(Unknown Source)
at java.net.HttpConnectSocketImpl.access$200(Unknown Source)
at java.net.HttpConnectSocketImpl$2.run(Unknown Source)
at java.net.HttpConnectSocketImpl$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.HttpConnectSocketImpl.privilegedDoTunnel(Unknown Source)
at java.net.HttpConnectSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at io.netty.channel.socket.oio.OioSocketChannel.doConnect(OioSocketChannel.java:282)
at io.netty.channel.oio.AbstractOioChannel$DefaultOioUnsafe.connect(AbstractOioChannel.java:70)
at io.netty.channel.DefaultChannelPipeline$HeadContext.connect(DefaultChannelPipeline.java:1266)
at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:555)
at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:540)
at io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50)
at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:555)
at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:540)
at io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50)
at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:555)
at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:540)
at io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50)
at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:555)
at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:540)
at io.netty.channel.ChannelDuplexHandler.connect(ChannelDuplexHandler.java:50)
at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:555)
at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:540)
at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:522)
at io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:985)
at io.netty.channel.AbstractChannel.connect(AbstractChannel.java:255)
at io.netty.bootstrap.Bootstrap$3.run(Bootstrap.java:252)
at io.netty.channel.ThreadPerChannelEventLoop.run(ThreadPerChannelEventLoop.java:67)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:877)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
... 33 more
Caused by: java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.doTunneling(Unknown Source)
... 37 more

0

Hmm, skupiam się jak mogę, ale nic nie wyczuwam. Może pokażesz ten prosty kawałek kodu? Prosty znaczy goła funkcja main, bez żadnych frameworków.

0

Funkcja main ogólna, czy tej klasy?
Bo ogólna uruchamia tylko kilka wątków...
czyli mam po prostu ogoliś ten wątek z frameworków, ta?

0

Nowa funkcja main, specjalnie pod ten wątek*, albo test jednostkowy.

Edit: * chodzi mi o wątek forum, nie o thread :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.