CheckProxy - проверка связи с прокси сервером

Софт только для Windows (всех версий)

CheckProxy - проверка связи с прокси сервером

Сообщение rvg » 05 сен 2024, 19:11

Проверка прокси. Проверяется Socks5 и Socks4.
Программа работает в двух режимах.
Первый, с параметром - файла-списка, запуск (пример): CheckProxy MyProxy.txt
Во-втором режиме, запуск - без параметров, предполагается - нахождение в папке с программой, текстового файла "Proxy.txt".
Формат списка "Proxy.txt":
Код: Выделить всё
127.0.0.1:8080
127.0.0.2:1080
127.0.0.3:8485

Сборка программы осуществляется двумя средами разработки, это Borland C++ и Visual Studio.
 Развернуть: Main.h
Код: Выделить всё
// Main.h

#pragma once

enum COLORS {
BLACK,
BLUE,
GREEN,
CYAN,
RED,
MAGENTA,
BROWN,
LIGHTGRAY,
DARKGRAY,
LIGHTBLUE,
LIGHTGREEN,
LIGHTCYAN,
LIGHTRED,
LIGHTMAGENTA,
YELLOW,
WHITE
};

void mb(char* s);
char* appBaseDir();
char* StampDateTime(void);
char* NameDateTime(void);

/* Default "bRewrite = TRUE" rewrite file,
* "dwNumberOfBytesToWrite = 0" write char.
*/
void log(char* svFilename, char* svStr,
   BOOL bRewrite=FALSE,
   DWORD dwNumberOfBytesToWrite=0);

char* BreakString(char* svLines, char* svTok);
u_long GetAdr(char* svHostname);

void setcolor(WORD color);
void gotoxy(SHORT x, SHORT y);
WORD savecolor(void);
void restorecolor(WORD wAttributes);

 Развернуть: Main.cpp
Код: Выделить всё
// CheckProxy.cpp

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <winsock2.h>
#include "Main.h"
#include "Socks.h"

char* GAppname = "Check Proxy";

#define   SERVER_QUERY      "google.com"
#define   SERVER_QUERY_PORT   443
#define   SERVER_QUERY_DELAY   2000

int main(int argc, char *argv[])
{
   WORD wAttributes;
   SetConsoleTitle(GAppname);

   char svFilename[MAX_PATH];   
   if (2!=argc)
      lstrcpy(svFilename, "Proxy.txt");
   else
      lstrcpy(svFilename, argv[1]);

   char svBuff[1024];   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }

   /* Make filename for log. */
   char svFilename_Log[MAX_PATH];
   char* svFolderName;
   svFolderName = NameDateTime();
   wsprintf(svFilename_Log,"%sProxy_%s.txt",
      appBaseDir(), svFolderName);

   /* Show prompt. */   
   setcolor(LIGHTGRAY);
   printf("%s -- 1.0 (c) by Anonymous\n", GAppname);

   WSADATA wsaData;
   if (WSAStartup(MAKEWORD(2,2),&wsaData))
   {
      fclose(stream);
      mb("Failed WSAStartup.");
   }

   u_long uDestadr = GetAdr(SERVER_QUERY);
   if (uDestadr<0)
   {
      wsprintf(svBuff,
      "Failed resolve \"%s\"", SERVER_QUERY);
      mb(svBuff);
   }

   char svProxyName[16];
   char svPort[6];
   int sock;
   
   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      if (' '!=svBuff[0] /* Skip commentary... */
         && '\t'!=svBuff[0]
         && ';'!=svBuff[0]
         && '/'!=svBuff[0])
      {
         if (svBuff[0])
         {
            if (strstr(svBuff, ":"))
            {
               char* ptr = BreakString(svBuff, ":");
               if (ptr)
               {
                  if (*ptr==' ')
                     ++ptr;
                  if (strchr(ptr,' '))
                     *strchr(ptr,' ')=0;                  
                  if (strchr(ptr,'\r'))
                     *strchr(ptr,'\r')=0;
                  if (strchr(ptr,'\n'))
                     *strchr(ptr,'\n')=0;

                  if (!*ptr && !*svBuff)
                     continue;
                  
                  lstrcpy(svPort, ptr);
                  lstrcpy(svProxyName, svBuff);

      /* Resolve proxy name... */
      u_long uProxyadr = GetAdr(svProxyName);
      if (uProxyadr<0)
      {
         wAttributes = savecolor();
         setcolor(LIGHTRED);
         printf("Could not resolve \"%s\"\n", svProxyName);
         /* Restore attributes console. */
         restorecolor(wAttributes);
         continue;
      }

      /* Send info. */
      setcolor(LIGHTGREEN);
      printf("%s Query server %s:%s\n",
         StampDateTime(),
         svProxyName,
         svPort);

      setcolor(LIGHTCYAN);
      printf("\tCheck SOCKS5...\n");

      if (SOCKS5_SUCCESS == Socks5Connect(
         &sock,
         uProxyadr,
         atoi(svPort),
         uDestadr,
         SERVER_QUERY_PORT,
         SERVER_QUERY_DELAY))
      {
         setcolor(LIGHTGREEN);
         printf("\t\tIs up -- PA6OTAET! --\n");

         shutdown(sock, SD_BOTH);

         /* Write to log. */
         wsprintf(svBuff,
            "; SOCKS5\r\n"
            "%s\r\n%s\r\n\r\n",
            svProxyName,
            svPort);
         log(svFilename_Log, svBuff);
      }
      else
      {
         setcolor(LIGHTGRAY);
         printf("\t\tIs down (B OTCTOE).\n");
      }

      /* Send info. */
      setcolor(LIGHTCYAN);
      printf("\tCheck SOCKS4...\n");

      if (SOCKS4_SUCCESS == Socks4Connect(
         &sock,
         uProxyadr,
         atoi(svPort),
         uDestadr,
         SERVER_QUERY_PORT,
         SERVER_QUERY_DELAY * 2))
      {
         /* Send info. */
         setcolor(LIGHTGREEN);
         printf("\t\tIs up -- PA6OTAET! --\n");

         shutdown(sock, SD_BOTH);

         /* Write to log. */
         wsprintf(svBuff,
            "; SOCKS4\r\n"
            "%s\r\n%s\r\n\r\n",
            svProxyName,
            svPort);
         log(svFilename_Log, svBuff);
      }
      else
      {
         setcolor(LIGHTGRAY);
         printf("\t\tIs down (B OTCTOE).\n");
      }

               } /* End "if(svPort)" */
            } /* End "if (strstr(svBuff, ":"))" */
         } /* End "if(svBuff[0])" */
      } /* End "if(';')" */
   } /* End "while" */
   fclose(stream);

   setcolor(YELLOW);
   printf("--[Done]--\n");

   system("pause>nul");
   return 0;
}

void mb(char* s)
{
   UINT uType=MB_OK | MB_ICONINFORMATION |
   MB_SETFOREGROUND | MB_SYSTEMMODAL;
   int n=0;
   if (strstr(s,"Failed") || strstr(s,"Error"))
      ++n;
   if (n) {
      uType &=~MB_ICONINFORMATION;
      uType |=MB_ICONWARNING;
   } MessageBox(GetActiveWindow(),s,GAppname,uType);
   if (n)
      ExitProcess(n);
}

char* appBaseDir()
{
   static char svBuff[MAX_PATH];
   if (!svBuff[0]) {
      GetModuleFileName(GetModuleHandle(NULL),svBuff,MAX_PATH);
      int i;
      for (i=lstrlen(svBuff)-1;i>0;--i) {
         if ('\\'==svBuff[i-1] || '/'==svBuff[i-1])
         break;
      }
      svBuff[i]=0;
   }
   return svBuff;
}

char* StampDateTime(void)
{
   /* Output "29 Jun 2024 19:05:52" */
   static char svResult[64];
   time_t tTime;
   struct tm* ptm;
   tTime = time(NULL);
   ptm = localtime(&tTime);
   strftime(svResult, 64,
      "%d %b %Y %H:%M:%S",// 29 Jun 2024 19:05:52
      //"%a, %d %b %Y %H:%M:%S",// Sat, 29 Jun 2024 19:05:52
      ptm);
   return svResult;
}

char* NameDateTime(void)
{
   /* Output "06-08-2024_11-37-37" */
   static char svBuff[256];
   char svDate[128];
   char svTime[128];
   GetDateFormat(LOCALE_SYSTEM_DEFAULT,0,NULL,"dd-MM-yyyy",svDate,128);
   GetTimeFormat(LOCALE_SYSTEM_DEFAULT,TIME_FORCE24HOURFORMAT,NULL,"hh'-'mm'-'ss",svTime,128);
   wsprintf(svBuff,"%.100s_%.100s",svDate,svTime);
   return svBuff;
}

void log(char* svFilename, char* svStr, BOOL bRewrite,
   DWORD dwNumberOfBytesToWrite)
{
   /*
   * Default "bRewrite = TRUE" - rewrite file,
   * "dwNumberOfBytesToWrite = 0" - write char.
   */

   DWORD dwCreationDistribution, dwBytesWritten;
   dwCreationDistribution=OPEN_ALWAYS;
   if (!*svFilename)
   {
      mb("log() - empty filename!");
      return;
   }
   if (bRewrite)
      dwCreationDistribution=CREATE_ALWAYS;
   
   HANDLE hFile;
   hFile=CreateFile(svFilename,GENERIC_WRITE,
      0,NULL,dwCreationDistribution,
      FILE_ATTRIBUTE_NORMAL,NULL);
   if (INVALID_HANDLE_VALUE==hFile)
   {
      char svBuff[512];
      wsprintf(svBuff,
         "Could not create file log()\n\n\"%s\"\n",
         svFilename);
      mb(svBuff);
   }
   else
   {
      SetFilePointer(hFile,0,NULL,FILE_END);
      if (!dwNumberOfBytesToWrite)
         dwNumberOfBytesToWrite=lstrlen(svStr);
      WriteFile(hFile,svStr,
         dwNumberOfBytesToWrite,&dwBytesWritten,NULL);
      CloseHandle(hFile);
   }
}

char* BreakString(char* svLines, char* svTok)
{
   char *tok, *s;   
   char* p=svLines;
   if (*p)
   {
      while (*p)
      {
         for (s=p,tok=svTok;(*s)&&(*tok);++s,++tok)
         {
            if (*s!=*tok)
               break;
         }
         if (!*tok)
         {
            *p=0;
            return p+lstrlen(svTok);
         }
         ++p;
      }
   }
   return NULL;
}

u_long GetAdr(char* svHostname)
{
   u_long Addr = inet_addr(svHostname);
   if (INADDR_NONE==Addr) {
      struct hostent* h;
      h = gethostbyname(svHostname);
      if (h)
         Addr = *(u_long*)h->h_addr;
   }
   return Addr;
}

void setcolor(WORD color)
{
   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
}

void gotoxy(SHORT x, SHORT y)
{
   COORD coord;
   coord.X=x;
   coord.Y=y;
   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

WORD savecolor(void)
{
   CONSOLE_SCREEN_BUFFER_INFO csbi;
   WORD wAttributes = LIGHTGRAY;
   if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi))
      wAttributes = csbi.wAttributes;
   return wAttributes;
}

void restorecolor(WORD wAttributes)
{
   /* Set the attribute to the original. */
   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
      wAttributes);
}

 Развернуть: Socks.h
Код: Выделить всё
// Socks.h

#pragma once

#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>

#define   SOCKS_VERSION_4      4
#define   SOCKS_VERSION_5      5

#define   SOCKS_CONNECT      1
#define   SOCKS_BIND         2
#define   SOCKS_UDP_ASSOCIATE 3

#define   SOCKS_IPV4         1
#define   SOCKS_IPV6         4
#define   SOCKS_DOMAINNAME   3

enum SOCKS5_ERROR {
   SOCKS5_SUCCESS,
   SOCKS5_SERVER_FAILURE,
   SOCKS5_CONNECTION_DISALLOWED,   
   SOCKS5_NETWORK_UNREACHABLE,
   SOCKS5_HOST_UNREACHABLE,
   SOCKS5_CONNECTION_REFUSED,
   SOCKS5_TTL_EXPIRED,
   SOCKS5_INVALID_COMMAND,
   SOCKS5_INVALID_ADDRESS,
   SOCKS5_OTHER
};

enum SOCKS4_ERROR {
   SOCKS4_SUCCESS = 0x5A,
   SOCKS4_REJECTED = 0x5B,
   SOCKS4_NETWORK_UNREACHABLE = 0x5C,
   SOCKS4_INVALID_USERID = 0x5D
};

typedef struct _SOCKS5_REQUEST {
   BYTE   Version;
   BYTE   Command;
   BYTE   Reserved;
   BYTE   AddressType;
   DWORD   DestAddress;
   WORD   DestPort;
} SOCKS5_REQUEST, *PSOCKS5_REQUEST;

typedef struct _SOCKS5_REPLY {
   BYTE   Version;
   BYTE   Reply;
   BYTE   Reserved;
   BYTE   AddressType;
   DWORD   RemoteAddress;
   WORD   RemotePort;
} SOCKS5_REPLY, *PSOCKS5_REPLY;

typedef struct _SOCKS4_REQUEST {
   BYTE   Version;
   BYTE   Command;
   WORD   DestPort;
   DWORD   DestAddress;
   BYTE   UserId;
} SOCKS4_REQUEST, *PSOCKS4_REQUEST;

typedef struct _SOCKS4_REPLY {
   BYTE   Reserved;
   BYTE   Status;
   WORD   Reserved1;
   DWORD   Reserved2;
} SOCKS4_REPLY, *PSOCKS4_REPLY;

typedef struct _PROXY {
   _PROXY *Next;
   PCHAR   Address;
   PCHAR   Port;
   BYTE   Version;
} PROXY, *PPROXY;

BYTE Socks4Connect(int* sock,
   u_long uProxyadr, WORD wProxyPort,
   u_long uDestadr, WORD wDestPort,
   int nTimeout);

BYTE Socks5Connect(int* sock,
   u_long uProxyadr, WORD wProxyPort,
   u_long uDestadr, WORD wDestPort,
   int nTimeout);

 Развернуть: Socks.cpp
Код: Выделить всё
// Socks.cpp

#include <winsock2.h>
#include "Socks.h"

BYTE Socks4Connect(int* sock,
   u_long uProxyadr,
   WORD wProxyPort,
   u_long uDestadr,
   WORD wDestPort,
   int nTimeout)
{
   SOCKS4_REPLY SocksReply;
   SocksReply.Reserved = 0;
   SocksReply.Status = 0xFF;

   *sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (*sock<0)
      return SocksReply.Status;

   SOCKADDR_IN proxyaddr;
   memset(&proxyaddr, 0, sizeof(proxyaddr));
   proxyaddr.sin_family = AF_INET;
   proxyaddr.sin_addr.s_addr = uProxyadr;
   proxyaddr.sin_port = htons(wProxyPort);

   if (setsockopt(*sock, SOL_SOCKET,
      SO_RCVTIMEO, (char*)&nTimeout, sizeof(int))<0)
   {
      return SocksReply.Status;
   }

   if (connect(*sock, (LPSOCKADDR)&proxyaddr,
      sizeof(proxyaddr))<0)
   {
      return SocksReply.Status;
   }

   SOCKS4_REQUEST SocksRequest;
   SocksRequest.Version = SOCKS_VERSION_4;
   SocksRequest.Command = SOCKS_CONNECT;
   SocksRequest.DestPort = htons(wDestPort);
   SocksRequest.DestAddress = uDestadr;
   
   if (send(*sock, (char*)&SocksRequest,
      sizeof(SocksRequest), 0)<0)
   {
      return SocksReply.Status;
   }
   recv(*sock, (char*)&SocksReply, sizeof(SocksReply), 0);
   return SocksReply.Status;
}

BYTE Socks5Connect(int* sock,
   u_long uProxyadr,
   WORD wProxyPort,
   u_long uDestadr,
   WORD wDestPort,
   int nTimeout)
{
   SOCKS5_REPLY SocksReply;
   SocksReply.Reserved = 0;
   SocksReply.Reply = 0xFF;

   *sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (*sock<0)
      return SocksReply.Reply;

   SOCKADDR_IN proxyaddr;
   memset(&proxyaddr, 0, sizeof(proxyaddr));
   proxyaddr.sin_family = AF_INET;
   proxyaddr.sin_addr.s_addr = uProxyadr;
   proxyaddr.sin_port = htons(wProxyPort);

   if (setsockopt(*sock, SOL_SOCKET,
      SO_RCVTIMEO, (char*)&nTimeout, sizeof(int))<0)
   {
      return SocksReply.Reply;
   }

   if (connect(*sock, (LPSOCKADDR)&proxyaddr,
      sizeof(proxyaddr))<0)
   {
      return SocksReply.Reply;
   }

   SOCKS5_REQUEST SocksRequest;
   SocksRequest.Version = SOCKS_VERSION_5;
   SocksRequest.Command = SOCKS_CONNECT;
   SocksRequest.AddressType = SOCKS_IPV4;
   SocksRequest.DestAddress = uDestadr;
   SocksRequest.DestPort = htons(wDestPort);

   for (int i=0; i<2; ++i)
   {
      if (send(*sock, (char*)&SocksRequest,
         sizeof(SocksRequest), 0)<0)
      {
         /* Failed send to socks proxy. */
         continue;
      }
      if (recv(*sock, (char*)&SocksReply,
         sizeof(SocksReply), 0)<0)
      {
         continue;
      }
      if (SocksReply.Reply)
         break;
   }
   return SocksReply.Reply;
}

Изображение
Вложения
CheckProxy.zip
(42.66 Кб) Скачиваний: 70
Аватара пользователя
rvg
Мастер Даунгрейда
 
Сообщения: 661
Зарегистрирован: 18 июл 2023, 14:12

FindIpPort - Найти IP-адрес, Порт

Сообщение rvg » 06 сен 2024, 15:43

Программа FindIpPort (Найти IP-адрес, Порт) предназначена для извлечения данных. Чтобы ей пользоваться, нужно зайти на сайт (определенный) и сохранить страницу. Запустить программу и выбрать сохраненную страницу.
Сейчас, программа настроена на использования с сайтом FreeProxyUpdate-сom.
Код: Выделить всё
// Main.cpp

/* Сейчас, функция "Find_Ip_Port" настроена на работу с сайтом "FreeProxyUpdate".
Это якорьки за которые цепляется функция "BreakString":
<td>127.0.1.1</td>
<td>1080</td>
*/

#include "Main.h"

int Find_Ip_Port(char* svFilename)
{
   char svBuff[1024];/* Открыть файл. */   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }

   /* Создать имя для записи результата. */
   char svFilename_Log[MAX_PATH];
   char* svName;
   svFolderName = NameDateTime();
   wsprintf(svFilename_Log,"%sProxy-NO-Check_%s.txt",
      appBaseDir(), svName);

   char svProxyName[16]; /* IP-адрес. */
   char svPort[6]; /* Порт. */
   char* ptr; /* Временная переменная. */
   int count = -1; /* Индикатор операций. */
   int total = 0; /* Счетчик результата. */

   /* Чтение строки из файла, огранич. CR-LF */   
   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      /* БрейкСтринг на символы "<td>"
      если обнаруживается, ptr содержит
      результат: IP-адрес, порт или всё
      остальное - содержимое страницы.
      (cм. картинку ниже)
      */
      ptr = BreakString(svBuff, "<td>");
      if (ptr)
      {
         if (count<0)
         {
            /* Проверить, символ - цифра? */
            if (*ptr>='0' && *ptr<='9')
            {
               *strchr(ptr, '<')=0;
               lstrcpy(svProxyName, ptr);
               count = 0;
            }
         }
         else if (!count)
         {
            if (*ptr>='0' && *ptr<='9')
            {
               *strchr(ptr, '<')=0;
               lstrcpy(svPort, ptr);
               count = 1;
            }
         }

         if (1==count)
         {
            /* Write to log. */
            wsprintf(svBuff,
               "%s:%s\r\n",
               svProxyName,
               svPort);
            log(svFilename_Log, svBuff);
            count = -1;
            ++total;
         }
      }
   }
   fclose(stream); /* Закрыть файл. */

   if (total)
      wsprintf(svBuff, "%d proxy servers.", total);
   else
      lstrcpy(svBuff, "Not found proxy servers.");

   mb(svBuff);
   return total;
}

/*
* Entry point (точка входа).
*/
void main(void)
{
   /* Для операции со-строками. */
   HINSTANCE hInstance=GetModuleHandle(NULL);
   LoadString(hInstance,IDS_APPNAME,GAppname,MAX_LOADSTRING);
   LoadString(hInstance,IDS_COMPANY,g_szCompany,MAX_LOADSTRING);
   SetConsoleTitle(GAppname);

   /* Show prompt. */   
   setcolor(LIGHTGRAY);
   printf("%s -- 1.0 (c) by Anonymous\n", GAppname);

   /* Загрузка значений из реестра. */
   Options_Load();

   if (!g_szInitialDir[0]) /* Инициализация переменной выбора папки. */
      lstrcpy(g_szInitialDir, appBaseDir());

   char* svFilename;
   svFilename = OpenFilename(g_szInitialDir);
   if (!*svFilename) /* Выход, если файл не выбран. */
      ExitProcess(0);
   /* Скопировать имя выбранного файла и обрезать до "слэш". */
   lstrcpy(g_szInitialDir, svFilename);
   int i;
   for (i=lstrlen(g_szInitialDir)-1;i>0;--i)
   {
      if ('\\'==g_szInitialDir[i-1]
         || '/'==g_szInitialDir[i-1])
         break;
   }
   g_szInitialDir[i]=0;

   /* Найти IP-address, порт из файла. */
   if (Find_Ip_Port(svFilename))
      setcolor(LIGHTGREEN);
   else
      setcolor(YELLOW);

   printf("--[Done]--\n");

   /* Сохранить данные в реестре. */
   Options_Save();

   system("pause>nul"); /* Не дать закрыть консольное окно,
         пока не нажать любую клавишу. */
}

Изображение
Вложения
FindIpPort.zip
(40.36 Кб) Скачиваний: 68
Аватара пользователя
rvg
Мастер Даунгрейда
 
Сообщения: 661
Зарегистрирован: 18 июл 2023, 14:12

FindIpPort -- 1.1

Сообщение rvg » 07 сен 2024, 09:03

Следующая версия. Теперь, можно брать данные с двух сайтов.
Код: Выделить всё
// Main.cpp
/*
===[ 01 ]=== The file "FreeProxyUpdate_com.txt"
URL https://freeproxyupdate.com/socks5-proxy
<td>127.0.1.1</td>

===[ 02 ]=== The file "Vpn_fail.txt"
URL https://vpn.fail/free-proxy/type/socks5
vpn.fail/free-proxy/ip/
*/

#include "Main.h"

int GetIndex(char* svFilename)
{
   char svBuff[1024];   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }

   int result = 0;
   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      if (strstr(svBuff, "freeproxyupdate.com"))
      {
         result = 1;
         break;
      }
      if (strstr(svBuff, "vpn.fail"))
      {
         result = 2;
         break;
      }
   }
   fclose(stream);
   return result;
}

int Vpn_fail(char* svFilename)
{
   char svBuff[4096];   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }
   /* Make filename for log. */
   char svFilename_Log[1024];
   char svName[32];
   lstrcpy(svName, NameDateTime());
   wsprintf(svFilename_Log,
      "%sProxy-Vpn_Fail-NO-Check_%s.txt",
      appBaseDir(), svName);

   char svProxyName[16];
   char* ptr;
   int total = 0;

   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      if (strstr(svBuff, "vpn.fail/free-proxy/ip/"))
      {
         ptr = BreakString(svBuff, ">");
         if (ptr)
         {
            if (*ptr>='0' && *ptr<='9')
            {
               *strchr(ptr, '<')=0;
               lstrcpy(svProxyName, ptr);

               /* Write to log. */
               wsprintf(svBuff,
                  "%s\r\n",
                  svProxyName);

               log(svFilename_Log, svBuff);
               ++total;
            }
         } /* End "if (ptr)" */
      } /* End "if (ptr)" */
   }
   fclose(stream);
   return total;
}

int FreeProxyUpdate_com(char* svFilename)
{
   char svBuff[1024];   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }
   /* Make filename for log. */
   char svFilename_Log[1024];
   char svName[32];
   lstrcpy(svName, NameDateTime());
   wsprintf(svFilename_Log,"%sProxy-NO-Check_%s.txt",
      appBaseDir(), svName);

   char svProxyName[16];
   char svPort[6];
   char* ptr;
   int count = -1;
   int total = 0;

   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      ptr = BreakString(svBuff, "<td>");
      if (ptr)
      {
         if (count<0)
         {
            if (*ptr>='0' && *ptr<='9')
            {
               *strchr(ptr, '<')=0;
               lstrcpy(svProxyName, ptr);
               count = 0;
            }
         }
         else if (!count)
         {
            if (*ptr>='0' && *ptr<='9')
            {
               *strchr(ptr, '<')=0;
               lstrcpy(svPort, ptr);
               count = 1;
            }
         }

         if (1==count)
         {
            /* Write to log. */
            wsprintf(svBuff,
               "%s:%s\r\n",
               svProxyName,
               svPort);
            log(svFilename_Log, svBuff);
            count = -1;
            ++total;
         }
      }
   }
   fclose(stream);
   return total;
}

/*
* Entry point.
*/
void main(void)
{
   HINSTANCE hInstance=GetModuleHandle(NULL);
   LoadString(hInstance,IDS_APPNAME,GAppname,MAX_LOADSTRING);
   LoadString(hInstance,IDS_COMPANY,g_szCompany,MAX_LOADSTRING);
   SetConsoleTitle(GAppname);

   /* Show prompt. */   
   setcolor(LIGHTGRAY);
   printf("%s -- 1.1 (c) by Anonymous\n", GAppname);

   /* Load options from registry. */
   Options_Load();

   if (!g_szInitialDir[0])
      lstrcpy(g_szInitialDir, appBaseDir());

   char* svFilename;
   svFilename = OpenFilename(g_szInitialDir);
   if (!*svFilename) /* Exit, if not select filename. */
      ExitProcess(0);
   lstrcpy(g_szInitialDir, svFilename);
   int i, total;
   for (i=lstrlen(g_szInitialDir)-1;i>0;--i)
   {
      if ('\\'==g_szInitialDir[i-1]
         || '/'==g_szInitialDir[i-1])
         break;
   }
   g_szInitialDir[i]=0;

   /* Save options to registry. */
   Options_Save();

   i = GetIndex(svFilename);
   switch (i) {
      case 1:
      total = FreeProxyUpdate_com(svFilename);
      break;
      case 2:
      total = Vpn_fail(svFilename);
      break;
      default:
      total = 0;
   }

   if (total)
   {
      setcolor(LIGHTGREEN);
      printf("Found %d proxy servers.\n", total);
   }
   else
   {
      setcolor(LIGHTGRAY);
      printf("Not found proxy servers.\n");
      setcolor(YELLOW);
   }
   printf("--[Done]--\n");
   system("pause>nul");
}


P.S. Сайт "02" (vpn.fail) некрасиво поступает, из тысячи лишь один работающий, правда я на двухсотом бросил (проверку), но думаю, так и есть.
Вложения
FindIpPort-1-1.zip
(78.18 Кб) Скачиваний: 70
Последний раз редактировалось rvg 07 сен 2024, 11:23, всего редактировалось 1 раз.
Аватара пользователя
rvg
Мастер Даунгрейда
 
Сообщения: 661
Зарегистрирован: 18 июл 2023, 14:12

CheckProxy - 1.2

Сообщение rvg » 11 сен 2024, 19:00

Убрана возможность запуска с параметром. Теперь просто - при запуске нужно выбрать файл.
Добавлена возможность указать удаленный хост для проверки.
Добавлена информация о степени выполнения работы.
Изображение
Вложения
CheckProxy-1-2.zip
(50.36 Кб) Скачиваний: 64
Аватара пользователя
rvg
Мастер Даунгрейда
 
Сообщения: 661
Зарегистрирован: 18 июл 2023, 14:12

FindIpPort Версия 1.2

Сообщение rvg » 13 сен 2024, 16:43

Добавлена возможность получать данные с сайта spys_Dot_one.
Точно получает с этих (двух) страниц:
spys_Dot_one/en/
spys_Dot_one/en/socks-proxy-list
сайт, динамически (т.е. время от времени) изменяет содерживмое (невидимое) страницы, а вот с какой частотой - неизвестно, поэтому, со временем - может не работать. Функция для работы с ним, в начале кода.
 Развернуть: Main.cpp
Код: Выделить всё
// Main.cpp

#include "Main.h"

int Spys_one(char* svFilename)
{
   char svBuff[4096];
   HANDLE hFile=CreateFile(svFilename,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
   if (INVALID_HANDLE_VALUE==hFile)
   {
      wsprintf(svBuff,"Failed open file\n\"%s\"",svFilename);
      mb(svBuff);
   }

   size_t size;
   size=GetFileSize(hFile,0);
   if (!size)
   {
      CloseHandle(hFile);
      wsprintf(svBuff,"Failed. Empty file\n\"%s\"",svFilename);
      mb(svBuff);
   }

   /* Copy to memory. */
   char* pData=(char*)malloc(size+1);
   if (!pData)
      mb("Failed allocate memory.");

   DWORD dwBytesRead;
   BOOL bRet=ReadFile(hFile,pData,size,&dwBytesRead, 0);
   CloseHandle(hFile);
   if (!bRet)
   {
      wsprintf(svBuff,"Failed ReadFile\n\"%s\"",svFilename);
      mb(svBuff);
   }

   /* Make filename for log. */
   char svFilename_Log[MAX_PATH];
   char svFilename_Temp[MAX_PATH];
   wsprintf(svFilename_Log,
      "%sNO-Check_Spys_one_%s.txt",
      appBaseDir(),
      NameDateTime());

   /* Make filename for temp. */
   wsprintf(svFilename_Temp,
      "%s\\%s.txt",
      g_szTempPath,
      NameDateTime());

   int total, n;
   total=n=0;

   for(size_t pos=0;pos<size-1;++pos)
   {
      n=0;
      if(0==memcmp(pData+pos,">",1))
      {
         ++n;
         char* c=pData+pos+n;
         while (*c!='<')
         {
            ++n;
            c=pData+pos+n;
         }
         if (1==n)
         {
            pos+=n;
            continue;
         }

         int len=n;
         char* svTemp=(char*)malloc(len+1);
         if (!svTemp)
            mb("Failed allocate memory #2");
         svTemp[len]=0;

         n=pos+1;
         lstrcpyn(svTemp,pData+n,len);
         pos+=2;

         wsprintf(svBuff,
            "%s\r\n",
            svTemp);
         log(svFilename_Temp, svBuff);
         ++total;
         ++pos;
         free(svTemp);
      } /* End "if memcmp" */
   } /* End "for pos" */

   free(pData);
   if (!total)
      return 0;
   total=0;

   /* Open temp-file. */
   FILE* stream = fopen(svFilename_Temp, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename_Temp);
      mb(svBuff);
   }

   char svLast[1024];
   char svProxyName[16];
   char svPort[6];
   svLast[0]=0;
   svProxyName[0]=svPort[0]=0;

   int dot, count;
   dot=count=0;

   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      if ('\n'!=svBuff[0]
         && '\r'!=svBuff[0]
         && ' '!=svBuff[0])
      {
         if (svBuff[0])
         {
            if (strchr(svBuff,'\r'))
               *strchr(svBuff,'\r')=0;
            if (strchr(svBuff,'\n'))
               *strchr(svBuff,'\n')=0;

            if (!svProxyName[0])
            {
               if (*svBuff>='0' && *svBuff<='9')
               {
                  int len=lstrlen(svBuff);
                  char* svTemp=(char*)malloc(len+1);
                  if (!svTemp)
                     mb("Failed allocate memory #3");
                  svTemp[len]=0;
                  lstrcpy(svTemp, svBuff);

                  char *ptr, *s;
                  s = svTemp;
                  ptr=(char*)strchr(s,'.');
               
                  while (ptr)
                  {
                     *ptr=0;
                     ++count;
                     s=ptr+1;
                     if (*s>='0' && *s<='9')
                        ptr=(char*)strchr(s,'.');
                     else
                     {
                        count=0;
                        break;
                     }
                  }
                  if (3==count)
                  {
                     lstrcpy(svProxyName, svBuff);
                     count=0;
                  }
                  else
                     count=0;
                  free(svTemp);
                  continue;
               } // End "if (*svBuff>='0' && *svBuff<='9')"
            } // End "if (!svProxyName[0])"

            if (svProxyName[0])
            {
               if (!lstrcmpi(svBuff,":")
                  /*|| !lstrcmpi(svBuff,"&nbsp;")*/)
               {
                  dot=1;
               }
               else if (strstr(svBuff, ":"))
               {
                  int len=lstrlen(svBuff);
                  if (len<=7)
                  {
                     if (svBuff[1]>='0' && svBuff[1]<='9')
                     {
                        lstrcpyn(svPort, svBuff+1, 6);

                        wsprintf(svBuff,
                           "%s:%s\r\n",
                           svProxyName,
                           svPort);

                        log(svFilename_Log, svBuff);
                        svProxyName[0]=svPort[0]=0;
                        dot = 0;
                        ++total;
                     }
                  }
               }
               else if (dot)
               {
                  if (*svBuff>='0' && *svBuff<='9')
                  {
                     lstrcpy(svPort, svBuff);

                     wsprintf(svBuff,
                        "%s:%s\r\n",
                        svProxyName,
                        svPort);

                     if (!svLast[0])
                     {
                        lstrcpy(svLast, svBuff);
                        log(svFilename_Log, svBuff);
                        ++total;
                     }
                     else if (lstrcmpi(svBuff, svLast))
                     {
                        log(svFilename_Log, svBuff);
                        lstrcpy(svLast, svBuff);
                        ++total;
                     }
                     svProxyName[0]=svPort[0]=0;
                     dot = 0;
                  }
               }
            } // End "if (!svProxyName[0])"
         } // End "if (svBuff[0])"
      } // End "if ('\n'!=svBuff[0] &&'\r'!=svBuff[0])"
   } // End "while (fgets)"
   fclose(stream);
   DeleteFile(svFilename_Temp);
   return total;
}

int Hidxxx_name(char* svFilename)
{
   char svBuff[2048];   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }
   /* Make filename for log. */
   char svFilename_Log[MAX_PATH];
   wsprintf(svFilename_Log,
      "%sNO-Check_Hidxxx_name_%s.txt",
      appBaseDir(), NameDateTime());

   char svProxyName[16];
   char svPort[6];
   char *ptr, *d, tmp[2];
   int total, found;
   total = found = 0;
   svProxyName[0]=svPort[0]=0;

   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      ptr = BreakString(svBuff, "<tr><td>");
      if (ptr)
      {
         if (*ptr>='0' && *ptr<='9')
         {
            for (d=ptr; *d!=0; ++d)
            {
               if (*d!='<')
               {
                  wsprintf(tmp, "%c", *d);
                  lstrcat(svProxyName, tmp);
               }
               else
               {
                  ptr = ptr + lstrlen(svProxyName);

                  for (d=ptr; *d!=0; ++d)
                  {
                     if (*d>='0' && *d<='9')
                     {
                        if (*d!='<')
                        {
                           wsprintf(tmp, "%c", *d);
                           lstrcat(svPort, tmp);
                        }
                     }
                     else
                        if (svPort[0])
                        {
                           found = 1;
                           __asm jmp WRITE_LOG;
                        }
                  } /* for 2 */
                  break;
               }
            } /* End "for (d=ptr; *d!=0; ++d)" */
WRITE_LOG:
            /* Write to log. */
            if (found)
            {
               wsprintf(svBuff,
                  "%s:%s\r\n",
                  svProxyName,
                  svPort);
               log(svFilename_Log, svBuff);
               ++total;
               svProxyName[0]=svPort[0]=0;
               found = 0;
            } /* End "if (found)" */
         } /* End "if (*s>='0' && *s<='9')" */
      } /* End "if (ptr)" */
   } /* End "while ()" */
   fclose(stream);
   return total;
}

int FreeProxyUpdate_com(char* svFilename)
{
   char svBuff[2048];   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }
   /* Make filename for log. */
   char svFilename_Log[MAX_PATH];
   wsprintf(svFilename_Log,
      "%sNO-Check_Freeproxyupdate_com_%s.txt",
      appBaseDir(), NameDateTime());

   char svProxyName[16];
   char svPort[6];
   char* ptr;
   int count = -1;
   int total = 0;

   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      ptr = BreakString(svBuff, "<td>");
      if (ptr)
      {
         if (count<0)
         {
            if (*ptr>='0' && *ptr<='9')
            {
               *strchr(ptr, '<')=0;
               lstrcpy(svProxyName, ptr);
               count = 0;
            }
         }
         else if (!count)
         {
            if (*ptr>='0' && *ptr<='9')
            {
               *strchr(ptr, '<')=0;
               lstrcpy(svPort, ptr);
               count = 1;
            }
         }

         if (1==count)
         {
            /* Write to log. */
            wsprintf(svBuff,
               "%s:%s\r\n",
               svProxyName,
               svPort);
            log(svFilename_Log, svBuff);
            count = -1;
            ++total;
         }
      } /* End "if (ptr)" */
   }
   fclose(stream);
   return total;
}

int GetIndex(char* svFilename)
{
   char svBuff[2048];   
   FILE* stream = fopen(svFilename, "r");
   if (!stream) {
      wsprintf(svBuff,
         "Failed open\n\"%s\"", svFilename);
      mb(svBuff);
   }

   int result = 0;
   while (fgets(svBuff, sizeof(svBuff), stream))
   {
      if (strstr(svBuff, "freeproxyupdate.com"))
      {
         result = 1;
         break;
      }
      if (strstr(svBuff, "hidxxx.name"))
      {
         result = 2;
         break;
      }
      if (strstr(svBuff, "spys.one"))
      {
         result = 3;
         break;
      }
   }
   fclose(stream);
   return result;
}

/*
* Entry point.
*/
void main(void)
{
   HINSTANCE hInstance=GetModuleHandle(NULL);
   LoadString(hInstance,IDS_APPNAME,GAppname,MAX_LOADSTRING);
   LoadString(hInstance,IDS_COMPANY,g_szCompany,MAX_LOADSTRING);
   SetConsoleTitle(GAppname);

   /* Check tempory folder. */
   DWORD dwFileSize;
   GetTempPath(MAX_PATH,g_szTempPath);
   if (!CheckFileExists(g_szTempPath,dwFileSize))
      mb("Failed, missing tempory folder.");

   /* Show prompt. */   
   setcolor(LIGHTGRAY);
   printf("%s -- 1.2 (c) by Anonymous\n", GAppname);
   setcolor(LIGHTGREEN);

   /* Load options from registry. */
   Options_Load();

   if (!g_szInitialDir[0])
      lstrcpy(g_szInitialDir, appBaseDir());

   char* svFilename;
   svFilename = OpenFilename(g_szInitialDir);
   if (!*svFilename) /* Exit, if not select filename. */
      ExitProcess(0);
   lstrcpy(g_szInitialDir, svFilename);
   
   int i, total;
   for (i=lstrlen(g_szInitialDir)-1;i>0;--i)
   {
      if ('\\'==g_szInitialDir[i-1]
         || '/'==g_szInitialDir[i-1])
         break;
   }
   g_szInitialDir[i]=0;

   /* Save options to registry. */
   Options_Save();

   i = GetIndex(svFilename);
   switch (i) {
      case 1:
      total = FreeProxyUpdate_com(svFilename);
      break;
      case 2:
      total = Hidxxx_name(svFilename);
      break;
      case 3:
      total = Spys_one(svFilename);
      break;
      default:
      total = 0;
   }

   if (total)
      printf("Found %d proxy servers.\n", total);
   else
   {
      setcolor(LIGHTGRAY);
      printf("Not found proxy servers.\n");
      setcolor(YELLOW);
   }
   printf("--[Done]--\n");
   system("pause>nul");
}
Вложения
FindIpPort-1-2.zip
(32.67 Кб) Скачиваний: 63
Аватара пользователя
rvg
Мастер Даунгрейда
 
Сообщения: 661
Зарегистрирован: 18 июл 2023, 14:12

FindIpPort 1.3

Сообщение rvg » 14 сен 2024, 20:37

Добавлен четвёртый сайт free-proxy-точка-cz. Сайт самый-самый ;) удачный в том плане, что HTTPS позволяют с лёгкостью работать. Проверять их не надо.
Я произвёл некоторые изменения (со-вчерашней версией) - перекачайте.
Несколько слов о последней (четвертой) функции. Как заметят пристальные читатели, от функции к функции программа изменяется. Так вот в самой последней функции вы увидите, что появилась функция GetTextFromHttp - функция будет полезна не только в этой программе. Можно приспособить для разбора Htm-страницы под свои нужды. Функция возвращает весь текст находящийся между ">" и "<" (некоторые символы игнорирует, вы можете настроить степень игнорирования сами).
Вложения
FindIpPort-1-3.zip
(34.69 Кб) Скачиваний: 70
Последний раз редактировалось rvg 15 сен 2024, 07:11, всего редактировалось 3 раз(а).
Аватара пользователя
rvg
Мастер Даунгрейда
 
Сообщения: 661
Зарегистрирован: 18 июл 2023, 14:12


Вернуться в Программы для Windows

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4