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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0