ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

20.07.2007, 10:21
|
|
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме: 1941233
Репутация:
2726
|
|
в 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 в стеке, там был мусор.
|
|
|

20.07.2007, 11:46
|
|
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме: 4610226
Репутация:
1332
|
|
Код:
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: " будет идти чтение с не зарезервированного участка памяти, что к ошибке рантайм должно привести.
|
|
|

20.07.2007, 11:53
|
|
Участник форума
Регистрация: 09.02.2004
Сообщений: 122
Провел на форуме: 1089794
Репутация:
134
|
|
Сообщение от KEZ
ага, спрашивается зачем использовать strncpy, если указывается длинна переданой строки
с HOST_SIZE+1 начанается переполнение стека и возможность выполнить произвольный код...
Как защититься от переполнения?
|
|
|

20.07.2007, 12:43
|
|
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме: 2009677
Репутация:
472
|
|
NetMan, у стандартных функций типа strcpy есть безопасные аналоги, которые позволяют ограничивать размер, таже strncpy, другое дело, что ТС не правильно ее использует.
|
|
|

20.07.2007, 16:43
|
|
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме: 413927
Репутация:
71
|
|
Большое спасибо за коментарии, критику учту, хотя во многих постах чуствовалаль почемута некоторая агрессия, это все таки "первый блин". По поводу работоспособности я с ним пару часов серфил на опере, не скажу что было очень стабильно но работало. по поводу /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 в 16:49..
|
|
|

20.07.2007, 21:58
|
|
Участник форума
Регистрация: 11.07.2006
Сообщений: 125
Провел на форуме: 413927
Репутация:
71
|
|
если я еще не всех доеп (помоему здесь все какие то вспыльчивые) может кто нибудь посоветовать как проверить состояние сокета потому как если клиент отправил данные но не закрыл сокет ф-я reсvостанавливает выполнение программы. в гет-запросе проблем никаких достаточно найти /r/n/r/n а вот пост-запрос еще шлет длину запроса а вымерять ее как то не хочеться
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|