Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

16.07.2007, 21:25
|
|
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме: 413927
Репутация:
71
|
|
Release HttpProxyServer
Вот собсна решил наваять и выложить на общий суд
-язык с+api
-открывает 31337 порт
-логов не ведет
-весит мало ~10к (так я не понял откуда лишних 5к взялись а они лишние, точно)
-исходники прилагаются
HttpProxyServer
Последний раз редактировалось da_ff; 17.07.2007 в 21:58..
|
|
|

18.07.2007, 11:49
|
|
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме: 413927
Репутация:
71
|
|
несколько человек добавили в репу с примерно следующим коментарием
Сообщение от kez
на*** релизить ***ню всякую? давай ещё блокнот напишем?
причем тут блокнот это первый опыт в сетевом кодинге я просил посмотреть и высказать мнения, указать слабые места, показать как лучше.
|
|
|

19.07.2007, 21:21
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
> причем тут блокнот это первый опыт в сетевом кодинге я просил посмотреть и высказать мнения, указать слабые места, показать как лучше.
НИКАК не лучше и НИКАК не хуже потому что это просто ПРОКСИ, сорцов которого полно в инете на каждом сайте.
> -язык с+api
поведуй, что это а язык такой c+api?
хотя знаешь, тупости я в сорцах немного нашел. видимо это свойство интересного языка c+api, НО
Код:
if(wParam==IDSERVER)
{
char cStatServ[15];
GetDlgItemText(hWnd,IDSERVER,cStatServ,15);
if(!strcmp(cStatServ,"Start Server"))
вот это что?) (хотябы [16] элементов бы задал для правильности)
какой ещё GetDlgItemTextA() ? сделай флаг g_bStarted = TRUE/FALSE; и всё
далее
Код:
void CenterWindow(HWND hWnd)
{
RECT rt;
GetWindowRect(hWnd,&rt);
MoveWindow(hWnd,
(GetSystemMetrics(SM_CXSCREEN)-rt.right)>>1,
(GetSystemMetrics(SM_CYSCREEN)-rt.bottom)>>1,
rt.right-rt.left,
rt.bottom-rt.top,
0);
}
абсолютно бессмысленно - можно просто указать что диалог будет по центру, что указывается в настройках ресурса "ДИАЛОГ"
и вот это тупо тоже
Код:
while(strncmp(cBuf+iResult-4,"\r\n\r\n",4));
если только схематично, а так нет смысла вызывать strncmp
РАЗМЕР
У тебя рантайм используется. Отключай
#pragma comment(linker,"/entry:EntryPoint")
void EntryPoint( void )
// точка входа
в WM_COMMAND:IDCANCEL
Код:
WSACleanup();
EndDialog(hWnd,0);
ExitProcess(0);
неправильно, правильнее будет вызывать EndDialog()
а в обработчике WM_CLOSE делать ExitProcess() или PostQuitMessage( 0 );
ещё нужно вызывать TerminateThread( hThread, 0 );
иначе нахер ты сохраняешь хенлд созданого потока?
и ещё, поставил бы ты таймауты на поток, обслуживающий клиент.
Последний раз редактировалось KEZ; 19.07.2007 в 21:33..
|
|
|

19.07.2007, 21:50
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Про размер я уже 100 раз писал! Больше писать не буду. Буду давать ссылку на свой пост на WASM.RU:
http://wasm.ru/forum/viewtopic.php?pid=188444#p188444
|
|
|

19.07.2007, 22:43
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
Код:
char *cHost=(char *)malloc(HOST_SIZE);
int iHostBeg=strstr(cBuf,"Host: ")-cBuf+6;
int iHostLen=strstr(cBuf+iHostBeg,"\r")-cBuf-iHostBeg;
strncpy(cHost,cBuf+iHostBeg,iHostLen);
|
|
|

20.07.2007, 04:22
|
|
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
Провел на форуме: 246020
Репутация:
105
|
|
блин, весь вечер убил на то чтобы перевести cpp>>delphi, людей подключил, в сё зря
исходник не работает на Delphi7 и как оказалось на срр тоже, все компилиться, врожде создаеться сервер, но при включении и использовании ничего не получаеться. переведенный исходник тут .
исправь код!
|
|
|

20.07.2007, 09:06
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
char *cHost=(char *)malloc(HOST_SIZE);
int iHostBeg=strstr(cBuf,"Host: ")-cBuf+6;
int iHostLen=strstr(cBuf+iHostBeg,"\r")-cBuf-iHostBeg;
strncpy(cHost,cBuf+iHostBeg,iHostLen);
ага, спрашивается зачем использовать str ncpy, если указывается длинна переданой строки
с HOST_SIZE+1 начанается переполнение стека и возможность выполнить произвольный код...
причем сервер падает у меня при использовании Firefox'ом 2.0.0.4 при первом же запросе, и я даже не разбирался почему)
|
|
|

20.07.2007, 09:18
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
Открыл код... сразу бросилась в глаза передача сокетов по ссылке.. вопрос - нафига?
Далее
if(!strcmp(cStatServ,"Start Server"))
это жесть. Ставить флаг быстрее будет
Код:
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(port);
saddr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(*s,(sockaddr*)&saddr,sizeof(struct sockaddr))==SOCKET_ERROR)
1) А кто очистит sin_zero ?
2) Нафига делать htonl(INADDR_ANY)? Тем более что inaddr_any=0
3) не sizeof(struct sockaddr), а sizeof(struct sockaddr_in).
Код:
do
{
int i=recv(sSock,cTemp,iSize,0);
if(i<1)
return iResult;
iResult+=i;
cTemp+=i;
iSize-=i;
}
while(strncmp(cBuf+iResult-4,"\r\n\r\n",4));
Переполнение буфера.
Код:
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(HTTP_PORT);
if((saddr.sin_addr.s_addr=inet_addr("cHost"))==INADDR_NONE)
{
Ой это вообще без комментариев. Это не работает 100%. Что называется "полный П"
|
|
|

20.07.2007, 09:33
|
|
Участник форума
Регистрация: 14.03.2005
Сообщений: 267
Провел на форуме: 2827464
Репутация:
545
|
|
> 1) А кто очистит sin_zero ?
а его не надо очищать
> 3) не sizeof(struct sockaddr), а sizeof(struct sockaddr_in).
в Windows 95, 98, NT, XP и тд некритично. вообще обычно делаю sizeof( s_a ) где s_a типа sockaddr_in
> 2) Нафига делать htonl(INADDR_ANY)? Тем более что inaddr_any=0
да это тупость)
> if((saddr.sin_addr.s_addr=inet_addr("cHost"))==INA DDR_NONE)
ага, это я не заметил... напоминает php ; )
А про переполнения отдельная тема.. везде где можно они есть)
|
|
|

20.07.2007, 09:47
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
> 1) А кто очистит sin_zero ?
а его не надо очищать
Я пробовал не очищать, оно ругается.
> 3) не sizeof(struct sockaddr), а sizeof(struct sockaddr_in).
в Windows 95, 98, NT, XP и тд некритично. вообще обычно делаю sizeof( s_a ) где s_a типа sockaddr_in
Некритично вообще, ибо sizeof(sockaddr)==sizeof(sockaddr_in). Но все таки нужно писать правильно
> if((saddr.sin_addr.s_addr=inet_addr("cHost"))==INA DDR_NONE)
ага, это я не заметил... напоминает php ; )
Скорее напоминает бред шизофреника)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|