Сканер портов VPN протокола IKeV2 для Borland C++ Builder 6

Гобелен - кликните для возврата на главную

Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.

Так почему бы не начать использовать обход блокировки YouTube при том что техническая возможность используя расширение nikolaevevge для браузера Mozilla Firefox уже появилась, а объем полезной(и не очень) информации на видеохостинге YouTube, по мнению некоторых диванных экспертов, меньше не стал.

Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.

Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.

На очередном конкурсе танцев, школьница отлично выступила.

Что использовать вместо Юбуст

Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.

Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.

Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!

104 549 руб.

Описание товара

Давайте попробуем иначе, перепишите код для Borland C++ Builder 6.Соедайте кнопку старта проксирования и остановки. Добавьте Momo поле в которое записывайте информацию о проксируемых пакетах и в частности портах Вот переработанный код для Borland C++ Builder 6, который включает: Кнопки старта/остановки проксирования. Поле Memo для логов. Проксирование UDP/TCP трафика на указанный IP (46.17.107.238). Файл заголовка (Unit1.h)
C++
    
#ifndef HH
#define HH
      
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
      
// Явные определения для BCB6
#ifndef SOCKET_ERROR
#define SOCKET_ERROR (-1)
#endif
#ifndef INVALID_SOCKET
#define INVALID_SOCKET (SOCKET)(~0)
#endif
      
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
      
class TForm1 : public TForm
{
__published:
    TButton *btnStart;
    TButton *btnStop;
    TMemo *Memo1;
    void __fastcall btnStartClick(TObject *Sender);
    void __fastcall btnStopClick(TObject *Sender);
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
      
private:
    bool isRunning;
    SOCKET tcpSocket;
    SOCKET udpSocket;
    static DWORD WINAPI TCPProxyThread(LPVOID lpParam);
    static DWORD WINAPI UDPProxyThread(LPVOID lpParam);
    void Log(const AnsiString &message);
      
public:
    __fastcall TForm1(TComponent* Owner);
};
      
// Правильное объявление глобальной переменной формы
extern PACKAGE TForm1 *Form1;
      
#endif

  
Файл реализации (Unit1.cpp)
C++
    
#include "h.h"
#include <stdio.h>
      
// Явное определение глобальной переменной формы
TForm1 *Form1;
      
#define PROXY_IP "46.17.107.238"
#define PROXY_PORT 500
      
//---------------------------------------------------------------------------
char* inet_ntoa_r(in_addr addr, char* buf) {
    sprintf(buf, "%d.%d.%d.%d",
            addr.S_un.S_un_b.s_b1,
            addr.S_un.S_un_b.s_b2,
            addr.S_un.S_un_b.s_b3,
            addr.S_un.S_un_b.s_b4);
    return buf;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    isRunning = false;
    tcpSocket = INVALID_SOCKET;
    udpSocket = INVALID_SOCKET;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        Log("Ошибка инициализации Winsock");
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    btnStopClick(NULL);
    WSACleanup();
}
//---------------------------------------------------------------------------
void TForm1::Log(const AnsiString &message)
{
    Memo1->Lines->Add(DateTimeToStr(Now()) + " | " + message);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStartClick(TObject *Sender)
{
    if (isRunning) return;
      
    // TCP сервер
    tcpSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (tcpSocket == INVALID_SOCKET) {
        Log("Ошибка создания TCP сокета: " + IntToStr(WSAGetLastError()));
        return;
    }
      
    sockaddr_in tcpAddr;
    tcpAddr.sin_family = AF_INET;
    tcpAddr.sin_port = htons(PROXY_PORT);
    tcpAddr.sin_addr.s_addr = INADDR_ANY;
      
    if (bind(tcpSocket, (sockaddr*)&tcpAddr, sizeof(tcpAddr)) == -1) {
        Log("Ошибка привязки TCP сокета: " + IntToStr(WSAGetLastError()));
        closesocket(tcpSocket);
        return;
    }
    listen(tcpSocket, SOMAXCONN);
      
    // UDP сервер
    udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (udpSocket == INVALID_SOCKET) {
        Log("Ошибка создания UDP сокета: " + IntToStr(WSAGetLastError()));
        closesocket(tcpSocket);
        return;
    }
      
    sockaddr_in udpAddr;
    udpAddr.sin_family = AF_INET;
    udpAddr.sin_port = htons(PROXY_PORT);
    udpAddr.sin_addr.s_addr = INADDR_ANY;
      
    if (bind(udpSocket, (sockaddr*)&udpAddr, sizeof(udpAddr)) == -1) {
        Log("Ошибка привязки UDP сокета: " + IntToStr(WSAGetLastError()));
        closesocket(tcpSocket);
        closesocket(udpSocket);
        return;
    }
      
    // Запуск потоков
    CreateThread(NULL, 0, &TCPProxyThread, this, 0, NULL);
    CreateThread(NULL, 0, &UDPProxyThread, this, 0, NULL);
      
    isRunning = true;
    Log("Прокси запущен на порту " + IntToStr(PROXY_PORT));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btnStopClick(TObject *Sender)
{
    if (!isRunning) return;
      
    closesocket(tcpSocket);
    closesocket(udpSocket);
    isRunning = false;
    Log("Прокси остановлен");
}
//---------------------------------------------------------------------------
DWORD WINAPI TForm1::TCPProxyThread(LPVOID lpParam)
{
    TForm1 *form = (TForm1*)lpParam;
    SOCKET clientSocket;
    sockaddr_in clientAddr;
    int addrLen = sizeof(clientAddr);
      
    while (form->isRunning) {
        clientSocket = accept(form->tcpSocket, (sockaddr*)&clientAddr, &addrLen);
        if (clientSocket == INVALID_SOCKET) continue;
      
        char clientIP[16];
        inet_ntoa_r(clientAddr.sin_addr, clientIP);
        form->Log("TCP подключение от: " + AnsiString(clientIP) + ":" + IntToStr(ntohs(clientAddr.sin_port)));
      
        // Перенаправление
        SOCKET proxySocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (proxySocket == INVALID_SOCKET) {
            form->Log("Ошибка создания прокси-сокета: " + IntToStr(WSAGetLastError()));
            closesocket(clientSocket);
            continue;
        }
      
        sockaddr_in proxyAddr;
        proxyAddr.sin_family = AF_INET;
        proxyAddr.sin_port = htons(PROXY_PORT);
        proxyAddr.sin_addr.s_addr = inet_addr(PROXY_IP);
      
        if (connect(proxySocket, (sockaddr*)&proxyAddr, sizeof(proxyAddr)) == -1) {
            form->Log("Ошибка подключения к прокси: " + IntToStr(WSAGetLastError()));
            closesocket(clientSocket);
            closesocket(proxySocket);
            continue;
        }
      
        // Передача данных
        char buffer[4096];
        int bytesRead;
        while ((bytesRead = recv(clientSocket, buffer, sizeof(buffer), 0)) > 0) {
            if (send(proxySocket, buffer, bytesRead, 0) == -1) {
                break;
            }
            form->Log("TCP пакет: " + IntToStr(bytesRead) + " байт");
        }
      
        closesocket(clientSocket);
        closesocket(proxySocket);
    }
    return 0;
}
//---------------------------------------------------------------------------
DWORD WINAPI TForm1::UDPProxyThread(LPVOID lpParam)
{
    TForm1 *form = (TForm1*)lpParam;
    char buffer[4096];
    sockaddr_in clientAddr;
    int addrLen = sizeof(clientAddr);
      
    while (form->isRunning) {
        int bytesRead = recvfrom(form->udpSocket, buffer, sizeof(buffer), 0,
                               (sockaddr*)&clientAddr, &addrLen);
        if (bytesRead <= 0) continue;
      
        char clientIP[16];
        inet_ntoa_r(clientAddr.sin_addr, clientIP);
        form->Log("UDP пакет от: " + AnsiString(clientIP) + ":" + IntToStr(ntohs(clientAddr.sin_port)) + 
                 ", размер: " + IntToStr(bytesRead) + " байт");
      
        // Перенаправление
        sockaddr_in proxyAddr;
        proxyAddr.sin_family = AF_INET;
        proxyAddr.sin_port = htons(PROXY_PORT);
        proxyAddr.sin_addr.s_addr = inet_addr(PROXY_IP);
      
        sendto(form->udpSocket, buffer, bytesRead, 0,
              (sockaddr*)&proxyAddr, sizeof(proxyAddr));
    }
    return 0;
}

  
Как это работает? Кнопки управления: btnStart — запускает прокси-сервер на указанном порту. btnStop — останавливает проксирование. Логирование: Все события (подключения, пакеты) выводятся в Memo1. Проксирование: TCP: Получает данные от клиента и перенаправляет на 46.17.107.238. UDP: Аналогично, но без установки соединения. Особенности: Использует потоки (CreateThread) для обработки подключений. Автоматически останавливается при закрытии формы. Настройка в Borland C++ Builder 6 Создайте форму с: Двумя кнопками (btnStart, btnStop). Поле Memo для логов. Скопируйте код в Unit1.h и Unit1.cpp. Убедитесь, что в настройках проекта добавлена библиотека ws2_32.lib. Теперь при запуске можно наблюдать проксируемый трафик в реальном времени!

Другие товары

Вы так же можете прочитать следующие статьи: