Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Windows Новый топик    Ответить
 простейший Proxy  [new]
lissyara
Member

Откуда: Made in USSR
Сообщений: 5944
Надо. Никаких кэширований ничё не надо. Чё-то рыл-рыл, ничё не нашёл.
Одним экзэшником без настроек, только http
Ни у кого нет на примете. Видел, давно, но щас не могу найти, название не помню
15 апр 05, 16:14    [1472288]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
rrrrrrrrrr
Member

Откуда: РТ
Сообщений: 6366
Есть такой shttp3.exe - могу на мыло кинуть, 100кб. Правда, shareware.
15 апр 05, 16:59    [1472514]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
rrrrrrrrrr
Member

Откуда: РТ
Сообщений: 6366
Ой, виноват. Он не прокси. Он веб. Извиняюсь.
15 апр 05, 17:01    [1472521]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
Yanis
Member

Откуда: Казахстан, Актау
Сообщений: 4219
http://search.centre.ru/soft/0_Server_Tools/Proxy_Servers/
?

Posted via ActualForum NNTP Server 1.1

15 апр 05, 20:52    [1473113]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
Шогал
Member

Откуда: Калининград
Сообщений: 1339
#define VERSION "v1.02"

//#include "windows.h"
#include "Winsock2.h"
#include "Winsvc.h"
#include "ws2tcpip.h"

#include "stdio.h"
#include "conio.h"
#pragma comment(lib, "Ws2_32.lib")
//#include "winsock2.h"
#define C_TIMEOUT 60;
#define SEND_TIMEOUT 3600;

#define MAGIC_WORD_LEN 42
#define MAGIC_WORD "Grigoriev rulez! Other lecturers must die!"

int OUR_PORT = 800;
int ENEMY_PORT = 3128;
char ENEMY_ADDR[256] = "localhost";

SOCKET s;
int PROXYMODE = 0;
char ENEMY_IP[16];

int getaddr(char *name, char *ip){
  ADDRINFOA *addr;
  if(getaddrinfo(name, NULL, NULL, &addr) != 0){
    return 0;
  }
  sprintf(ip, "%d.%d.%d.%d",
    (unsigned char)addr->ai_addr->sa_data[2],
    (unsigned char)addr->ai_addr->sa_data[3],    
    (unsigned char)addr->ai_addr->sa_data[4],    
    (unsigned char)addr->ai_addr->sa_data[5]);
  return 1;
} 

int streq(char *str1, char *str2){
  int i = 0;
  while(str2[i]){
    if(str1[i]!=str2[i]) return 0;
    i++;
  }
  return 1;
}

void parseheader(char *buff, char *addr, int *port, size_t *size){
  int mode = 0;
  size_t loc1 = 0, loc2 = 0;
  size_t pos1 = 0;
  size_t i;
  *port = 80;
  for(i = 0; i < *size; i++){
    switch(mode){
      case(0):
        if(buff[i] == ' '){
          mode++;
          loc1 = i;
        }
        break;
      case(1):
        if(streq(&buff[i], "http://")){
          *port = 80;
          mode++;
          i+=6;
        }
        break;
      case(2):
        if(buff[i] == ':'){
          *port = 0;
          mode++;
          break;
        }
        if(buff[i] == '/'){
          mode = 255;
          loc2 = i;
          break;
        }
        addr[pos1++] = buff[i];
        break;
      case(3):
        if(buff[i] == '/'){
          mode = 255;
          loc2 = i;
          break;
        }
        *port = (*port)*10 + buff[i] - '0';
    }
    if(mode == 255) break;
  }
  addr[pos1] = 0;
  if(loc1 && loc2){
    MoveMemory(&buff[loc1+1], &buff[loc2], (*size)-loc2+1);
    size -= (loc2-loc1);
  }
}

unsigned long int ids = 0;

void socktread(){
  WSANETWORKEVENTS netevents;
  SOCKET clnt, srv;
  size_t Size;
  SOCKADDR_IN addrs;
  WSAEVENT hEventC, hEventS, hEventWait;
  int connected;
  char desccl[256], descsv[256];
  char buff[65537];
  int _ENEMY_PORT = ENEMY_PORT;
  char _ENEMY_ADDR[256];
  char _ENEMY_IP[256];
  unsigned long int id;
  u_long bmode;
  TIMEVAL timeout;
  fd_set writefds;
  int temp;
  
  ids++;
  id = ids;

  sprintf(_ENEMY_ADDR, "%s", ENEMY_ADDR);
  sprintf(_ENEMY_IP, "%s", ENEMY_IP);
  Size = sizeof(addrs);
  clnt = accept(s, (SOCKADDR *)&addrs, (int *)&Size);
  if(!clnt) return;

  sprintf(desccl,"%s:%d", inet_ntoa(addrs.sin_addr), ntohs(addrs.sin_port));
  printf("[#%d] %s connected...\n", id, desccl);
  hEventC = WSACreateEvent();
  hEventS = WSACreateEvent();
  hEventWait = WSACreateEvent();
  WSAEventSelect(clnt, hEventC, FD_READ | FD_CLOSE);
  connected = 0;

  for(;;){
    // Client activity
    WSAEnumNetworkEvents(clnt, hEventC, &netevents);
    if(netevents.lNetworkEvents & FD_READ){
      Size = recv(clnt, buff, sizeof(buff)-1, 0);
      buff[Size] = 0;
      if(!connected){
        if((Size == MAGIC_WORD_LEN) && !strcmp(buff, MAGIC_WORD)){
          printf("[#%d] %s closed proxy server...\n", id, desccl);
          send(clnt, "200 Close command OK", 21, 0);
          exit(0);
        }
        if(!PROXYMODE){
          parseheader(buff, _ENEMY_ADDR, &_ENEMY_PORT, &Size);
          if(!getaddr(_ENEMY_ADDR, _ENEMY_IP)){
            sprintf(buff, "Server \"%s\" not found!", _ENEMY_ADDR);
            printf("[#%d] %s disconnected [%s not found]...\n", id, desccl, _ENEMY_ADDR);
            send(clnt, buff, (int)strlen(buff), 0);
            closesocket(clnt);
            WSAEventSelect(clnt, hEventC, 0);
            fflush(stdout);
            return;
          }
        }
        addrs.sin_addr.S_un.S_addr = inet_addr(_ENEMY_IP);
        addrs.sin_port = htons(_ENEMY_PORT);
        addrs.sin_family = PF_INET;
        sprintf(descsv, "%s:%d", _ENEMY_ADDR, _ENEMY_PORT);
        srv = socket(PF_INET,SOCK_STREAM,0);
        bmode = 1;
        ioctlsocket(srv, FIONBIO, &bmode);
        connect(srv, (SOCKADDR *)&addrs, sizeof(addrs));
        FD_SET(srv, &writefds);
        timeout.tv_sec = C_TIMEOUT;
        timeout.tv_usec = 0;
        select(0, NULL, &writefds, NULL, &timeout);
        connected = FD_ISSET(srv, &writefds);
        FD_ZERO(&writefds);
        if(!connected){
          sprintf(buff, "Server \"%s:%d\" connection timeout!", _ENEMY_ADDR, _ENEMY_PORT);
          printf("[#%d] %s disconnected [%s:%d connection timeout]...\n", id, desccl, _ENEMY_ADDR, _ENEMY_PORT);
          send(clnt, buff, (int)strlen(buff), 0);
          closesocket(srv);
          closesocket(clnt);
          WSAEventSelect(clnt, hEventC, 0);
          fflush(stdout);
          return;
        } else {
          WSAEventSelect(srv, hEventS, FD_READ | FD_CLOSE);
        }
      }
      printf("[#%d] %s->%s ===> (%d bytes)\n", id, desccl, descsv, Size);
      send(srv,buff,(int)Size,0);
      FD_SET(srv, &writefds);
      timeout.tv_sec = SEND_TIMEOUT;
      timeout.tv_usec = 0;
      select(0, NULL, &writefds, NULL, &timeout);
      FD_ZERO(&writefds);
    }
    if(netevents.lNetworkEvents & FD_CLOSE){
      closesocket(srv);
      WSAEventSelect(clnt, hEventC, 0);
      WSAEventSelect(srv, hEventS, 0);
      printf("[#%d] %s disconnected [Client]...\n", id, desccl);
      fflush(stdout);
      return;
    }

    // Enemy server activity
    if(connected){
      WSAEnumNetworkEvents(srv, hEventS, &netevents);
      if(netevents.lNetworkEvents & FD_READ){
        Size = recv(srv, buff, sizeof(buff)-1, 0);
        buff[Size] = 0;
        printf("[#%d] %s<-%s <=== (%d bytes)\n", id, desccl, descsv, Size);
        temp = send(clnt,buff,(size_t)Size,0);
        sprintf(buff,"ERROR: sent %d of %d",temp, Size);
        FD_SET(clnt, &writefds);
        timeout.tv_sec = SEND_TIMEOUT;
        timeout.tv_usec = 0;
        select(0, NULL, &writefds, NULL, &timeout);
        FD_ZERO(&writefds);
      }
      if(netevents.lNetworkEvents & FD_CLOSE){
        WSAEventSelect(srv, hEventS, 0);
        WSAEventSelect(clnt, hEventC, 0);
        closesocket(clnt);
        printf("[#%d] %s disconnected [Server]...\n", id, desccl);
        fflush(stdout);
        return;
      }
    }
    Sleep(1);
  }
}

int main(int argc, char *argv[]){
  SOCKADDR_IN saddr;
  WSADATA wsa;
  WSAEVENT hEvent;
  WSANETWORKEVENTS netevents;

  if(argc >= 2) OUR_PORT = atoi(argv[1]);
  if(argc >= 3){
    PROXYMODE = 1;
    sprintf(ENEMY_ADDR, "%s", argv[2]);
    if(argc >= 4) ENEMY_PORT = atoi(argv[3]);
  }
  WSAStartup(0x101, &wsa);
  printf("Anti-Kleus [%s] proxy server ready...\n", VERSION);
  if(PROXYMODE)
    if(!getaddr(ENEMY_ADDR, ENEMY_IP)){
      printf("Master server not found...");
      return 1;
    }
  //printf("%s ",enemy_addr);
  s = socket(PF_INET, SOCK_STREAM, 0);
  saddr.sin_family = PF_INET;
  saddr.sin_addr.S_un.S_addr = INADDR_ANY;
  saddr.sin_port = htons(OUR_PORT);
  if(bind(s, (SOCKADDR *)&saddr, sizeof(saddr))){
    printf("Bind port %d error...\n", OUR_PORT);
    return 2;
  }
  listen(s, 255);
  printf("Listening on port %d\n", OUR_PORT);
  hEvent = WSACreateEvent();
  WSAEventSelect(s, hEvent, FD_ACCEPT);
  if(PROXYMODE){
    printf("Redirection set to %s:%d\n", ENEMY_ADDR, ENEMY_PORT);
  }
  printf("\n");
  for(;;){
    if(WSAEnumNetworkEvents(s, hEvent, &netevents) == 0)
      if(netevents.lNetworkEvents & FD_ACCEPT)
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&socktread, NULL, 0, NULL);
    fflush(stdout);
    Sleep(1);
  }
}
Писал сам, некоторые баги есть, но их легко исправить.
15 апр 05, 21:20    [1473152]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
lissyara
Member

Откуда: Made in USSR
Сообщений: 5944
2 Шогал :)
Вот бы ещё знать, что с этим делать.... :)
2 Yanis
EasyProxyServer - она называлась. Вспомнил. Спасибо!

Posted via ActualForum NNTP Server 1.1

15 апр 05, 23:15    [1473257]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
2 Шогал

лучше б exe собрал бы...
27 апр 05, 15:03    [1502181]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
Шогал
Member

Откуда: Калининград
Сообщений: 1339
Собрал, закинул сюда:
http://tsbunker.net.ru/trash/proxy.exe
Параметры запуска: первым параметром порт (default=800), вторым удаленный прокси (если хочешь передавать запросы через него) (default=localhost), третим порт на удаленном прокси (default=3128).
30 апр 05, 21:34    [1510632]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
RatTail
Member [заблокирован]

Откуда: Z
Сообщений: 4517
Шогал
Собрал, закинул сюда:
http://tsbunker.net.ru/trash/proxy.exe
Параметры запуска: первым параметром порт (default=800), вторым удаленный прокси (если хочешь передавать запросы через него) (default=localhost), третим порт на удаленном прокси (default=3128).

Нормально! Мой юзверь подмены прокси на лету не заметил. Ж)
E:\>proxy 1111
Anti-Kleus [v1.02] proxy server ready...
Listening on port 1111

[#1] 192.168.0.20:1376 connected...
[#1] 192.168.0.20:1376->www.******.com:80 ===> (384 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (4380 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1460 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (2920 bytes)
[#1] 192.168.0.20:1376<-www.******.com:80 <=== (1942 bytes)
[#1] 192.168.0.20:1376 disconnected [Server]...
2 май 05, 13:17    [1511467]     Ответить | Цитировать Сообщить модератору
 Re: простейший Proxy  [new]
RatTail
Member [заблокирован]

Откуда: Z
Сообщений: 4517
Шогал
Собрал, закинул сюда:
http://tsbunker.net.ru/trash/proxy.exe
Параметры запуска: первым параметром порт (default=800), вторым удаленный прокси (если хочешь передавать запросы через него) (default=localhost), третим порт на удаленном прокси (default=3128).

Будь другом, если не в лом, кинь сюда исходники конкретно этого экзешника.
2 май 05, 15:55    [1511623]     Ответить | Цитировать Сообщить модератору
Все форумы / Windows Ответить