ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Release HttpProxyServer (https://forum.antichat.xyz/showthread.php?t=44585)

KEZ 20.07.2007 10:21

в MAC OS насколько я понимаю критично sizeof( sockaddr ) != sizeof( sockaddr_in )

> Я пробовал не очищать, оно ругается.
ругается? всю жизнь не ругалось)

s_a.sin_family = AF_INET;
s_a.sin_port = htons( 80 );
s_a.sin_addr.s_addr = inet_addr( ip );

вот и все что нужно, всегда так делал... s_a в стеке, там был мусор.

ZaCo 20.07.2007 11:46

Цитата:

Код:

        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));

Переполнение буфера.
переполнение буфера всегда лечится, а вот неправильную логику подпрограммы исправлять обычно сложнее: кто сказал что браузер пошлет запрос оканчивающийся сразу на \r\n\r\n, тут и про пост-запросы сразу забываем с таким парсингом. наверное придется проверять пост-ли это, если да, тогда смотрим поле Content-Length и продолжаем читать после \r\n\r\n ровно такое количество данных.
и strstr тем же смотри у всего cBuf наличие \r\n\r\n, а не strncmp, так как данные могу поступать как угодно.
2KEZ ну и наверняка без наличия "Host: " будет идти чтение с не зарезервированного участка памяти, что к ошибке рантайм должно привести.

NetMan 20.07.2007 11:53

Цитата:

Сообщение от KEZ
ага, спрашивается зачем использовать strncpy, если указывается длинна переданой строки
с HOST_SIZE+1 начанается переполнение стека и возможность выполнить произвольный код...

Как защититься от переполнения?

Ni0x 20.07.2007 12:43

NetMan, у стандартных функций типа strcpy есть безопасные аналоги, которые позволяют ограничивать размер, таже strncpy, другое дело, что ТС не правильно ее использует.

da_ff 20.07.2007 16:43

Большое спасибо за коментарии, критику учту, хотя во многих постах чуствовалаль почемута некоторая агрессия, это все таки "первый блин". По поводу работоспособности я с ним пару часов серфил на опере, не скажу что было очень стабильно но работало. по поводу /r/n/r/n это в процессе написания была некоторая проблема из- за чего применялась такая конструкция для отладки потом ее исправил но видимо выложил не исправленную версию.
а по поводу замены констант ну это просто облегчает читаемость все равно же в ехе будет число на этом месте.

>> if((saddr.sin_addr.s_addr=inet_addr("cHost"))==INA DDR_NONE)
>>Ой это вообще без комментариев. Это не работает 100%. Что называется "полный П"
причем тут пхп просто кавычки забыл убрать и все

>>saddr.sin_addr.s_addr=htonl(INADDR_ANY);

да действительно херня получилась...

da_ff 20.07.2007 21:58

если я еще не всех доеп (помоему здесь все какие то вспыльчивые) может кто нибудь посоветовать как проверить состояние сокета потому как если клиент отправил данные но не закрыл сокет ф-я reсvостанавливает выполнение программы. в гет-запросе проблем никаких достаточно найти /r/n/r/n а вот пост-запрос еще шлет длину запроса а вымерять ее как то не хочеться


Время: 09:04