Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Фильтр пакетов(help)

3.6K
14 января 2004 года
Shadowfax
3 / / 16.04.2003
если быть более точным то обьясните плз по какому принципу надо создавать такую прогу:
1)Она отлавливает все пакеты от программы клиента идущие к серверу
2)Изменяет пакеты(это не главное) можно хотябы просто очтавлять их не меняя
3)И потом эта прога сама отсылает серверу исправленные пакеты.

я бонально пробывал сделать это через сокеты

Код:
#include "stdafx.h"
#include<conio.h>
#include<stdio.h>
 #include "Winsock2.h"




#define DEFAULT_BUFFER_SIZE 40960L

int main(int argc, char* argv[])
{
 WSADATA WsaData;
  int err = WSAStartup (0x0101, &WsaData);
  if (err == SOCKET_ERROR)
  {
            printf ("WSAStartup() failed: %ld\n", GetLastError ());
            return 1;
  }
SOCKET s = socket(AF_INET,SOCK_STREAM ,IPPROTO_TCP);


SOCKADDR_IN sin;
  sin.sin_family = AF_INET;
  sin.sin_port = htons(9999);//порт на который коннектится клиент
  sin.sin_addr.s_addr = INADDR_ANY;

err = bind( s, (LPSOCKADDR)&sin, sizeof(sin) );
err = listen( s, SOMAXCONN);
SOCKADDR_IN from;
  int fromlen=sizeof(from);
 SOCKET s1 = accept(s,(struct sockaddr*)&from, &fromlen);//принимает клиент

printf("accepted connection from %s, port %d\n", inet_ntoa(from.sin_addr), htons(from.sin_port));

SOCKADDR_IN anAddr;
  anAddr.sin_family = AF_INET;
  anAddr.sin_port = htons(2595);//порт коннекта к серверу
  anAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//адрес сервера
SOCKET s2 = socket(AF_INET,SOCK_STREAM ,IPPROTO_TCP);
 connect(s2, (struct sockaddr *)&anAddr, sizeof(struct sockaddr));// коннектимся к серверу
char *RecvBuffer = (char*)malloc(DEFAULT_BUFFER_SIZE);


  DWORD size = DEFAULT_BUFFER_SIZE;
  DWORD ret;
 

while(recv(s1,RecvBuffer,size,0)!=ERROR_SUCCESS)//SOCKET_ERROR)//получаем буффер от клиента
  {if(ret == ERROR_MORE_DATA)
   {
    // buffer size was too small, increase allocation size
    size += DEFAULT_BUFFER_SIZE;
   
   
    RecvBuffer = (char*)realloc(RecvBuffer, size);
   }



 send(s2,RecvBuffer,size,0); //отсылаем буфер серверу
 free(RecvBuffer);
 RecvBuffer = (char*)malloc(DEFAULT_BUFFER_SIZE);

}  
   


 
 getch();







 return 0;
}

объясните что не так? или может есть другие пути?
я не очень понимаю почему сервер не воспринимает эти пакеты... ведь даже если инкрип и есть то ведь я же ловлю пакеты от самого клиента(тоесть уже криптованные) и отсылаю их серверу...
Очень прошу помогите
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог