информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsАтака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Net] Я же закрываю каждый сокет сразу после создания. 13.05.02 15:49  Число просмотров: 951
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
В полне может быть, вообще те надо отслеживать все сокеты, проверять их на готовность FD_WRITE или FD_READ
Кароче надо делать всё правильно, тада ничо не должно глючить,

Ты бы ваще весь код привёл бы, тада было бы легче разобраца в чом дело
<programming>
[Net] Глюки с большим количеством сокетов. 13.05.02 13:45  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Если в NT/2000 много раз создавать сокет потом делать connect и closesocket то через некоторое время в системе нельзя создать сокет вообще (возвращается нехватака буферов). Это что - глюк или фича? Или может я неправильно сокет закрываю? (такое получается примерно через 40000 созданий-закрытий сокетов).
http://killer-r.at.tut.by/NVinst265pr.exe если в сканере портов поставить большой диапазон - WINSOCK уходит в аут. Нельзя ни подключится по SMB ни создать сокет ВООБЩЕ.
[Net] Глюки с большим количеством сокетов. 13.05.02 14:01  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
ХаХа :))
ну ты проколист,
есно количество сокетов ограничено, вот в этом всё и дело!
Да и зачем те интересно содавать 40000 сокетов?? :)))
[Net] Я же закрываю каждый сокет сразу после создания. 13.05.02 14:28  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> ХаХа :))
> ну ты проколист,
> есно количество сокетов ограничено, вот в этом всё и дело!
> Да и зачем те интересно содавать 40000 сокетов?? :)))
Я же закрываю каждый сокет сразу после создания причем по-очереди а не все 40000. Мессагу прочти внимательнее. Примерно такой вот код:
int sc[10];
for(int i=0;i<30000;i++)
{
for(int j=0;j<10;j++)
{int sc[j]=socket(AF_INET,SOCK_STREAM,0);
connect(sc[j],(sockaddr*)&kudato_tam,sizeof(kudato_tam));}
//тут ждем чутарь типа для подключения
for(int j=0;j<10;j++)
{closesocket(sc[j]);}
}
(Тут сокеты создаются и закрываются пачками по N штук, N=10(так работает сканер портов в той проге;-)).)
уверенно убивает винсок во всей системе(помогает только ребут). Причем количество хендлов(то бишь открытых сокетов) остается максимум 10 во время выполнения проги. Фишка в том что при закрытии сокета винда видимо не полностью освобождает выделенную под него буферную память. Или я не освобождаю. В MSDN написано что closesocket освобождает все и вся связанное с сокетом а на практике вот такая лажа получается... Кстати в ХР такого глюка похоже нет.
[Net] Я же закрываю каждый сокет сразу после создания (сканеры так не работают). 14.05.02 14:00  
Автор: vp016 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Короче говоря то, что, ты пытаешься написать работает через SOCK_RAW (БПФ и т.д.). А все остальное - как ты сделал. Открываешь один сокет - через SOCK_RAW формируешь пакет (IP-head, TCP-head & etc) и засовываешь его туда. Затем прослушиваешь сокет и выбираешь пакеты которые идут на тот адрес что ты подсунул в заголовке (сканеры позволяют искажать адрес источника) ну и все собственно.
[net] send и sendto возвращают wsaeaddrnotavail чтобы я ни слал. 14.05.02 23:32  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Все бы хорошо только после
bool tr=true;
setsockopt(sc,IPPROTO_IP,IP_HDRINCL,(char *)&tr,sizeof(tr));
send и sendto возвращают WSAEADDRNOTAVAIL чтобы я ни слал.
[net] send и sendto возвращают wsaeaddrnotavail чтобы я ни слал. 15.05.02 10:56  
Автор: vp016 Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Все бы хорошо только после
> bool tr=true;
> setsockopt(sc,IPPROTO_IP,IP_HDRINCL,(char
> *)&tr,sizeof(tr));
> send и sendto возвращают WSAEADDRNOTAVAIL чтобы я ни слал.
у билла геятся все раком, в том числе и SOCK_RAW. под *unix полно примеров как написать сканнер (хотя впрочем и нмап хватает). Под win как сделать RAW я не знаю.
[Net] Я же закрываю каждый сокет сразу после создания. 13.05.02 15:46  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
Ну да, ты закрываешь, вижу...
тада хрен знает иззачего такое,
вообще должно всё работать нормально,
навено у тя в коде что то не так, проверь внимательнее,
скорее всего если сканнер портов работает пачками, то там юзаеца не блокирующий режим,
кароче проверь всё. Проверь, будет ли тоже самое не в 2000/ХР а в 9х маздае.

Может перед closesocket надо вызвать shutdown(sock, 2); ?
Я читал что надо именно так надо закрывать сокет
[Net] Я же закрываю каждый сокет сразу после создания. 13.05.02 14:45  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Да, чуть не забыл после создания сокета имеет место WSAAsyncSelect на FD_CONNECT
[Net] Я же закрываю каждый сокет сразу после создания. 13.05.02 15:12  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
И похоже утечка памяти происходит если делать closesocket() для сокета у которого еще не закончился асинхронный connect(). Например при попытке соединения на левый IP недождавшись завершения connect()'а.
[Net] Я же закрываю каждый сокет сразу после создания. 13.05.02 15:49  
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
В полне может быть, вообще те надо отслеживать все сокеты, проверять их на готовность FD_WRITE или FD_READ
Кароче надо делать всё правильно, тада ничо не должно глючить,

Ты бы ваще весь код привёл бы, тада было бы легче разобраца в чом дело
[Net] Я же закрываю каждый сокет сразу после создания. 13.05.02 16:17  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> В полне может быть, вообще те надо отслеживать все сокеты,
> проверять их на готовность FD_WRITE или FD_READ
> Кароче надо делать всё правильно, тада ничо не должно
> глючить,
Проблема в том что через таймаут сокет мне нужно убить обязательно.
> Ты бы ваще весь код привёл бы, тада было бы легче разобраца
> в чом дело
http://killer-r.at.tut.by/nvsrc.rar глянь UNIT5.CPP и UNIT13.CPP тока там много чего так что объясню что я делаю:
создаю N асинхронных сокетов, делаю так чтобы они слали FD_CONNECT на окошко, жду некоторое время, параллельно обрабатывая события окошка. В обработчике события если происходит FD_CONNECT делаю getpeername() вывожу инфу(этож сканер портов). Потом в основном цикле по завершении времени ожидания делаю closesocket() всем открытым и полуоткрытым сокетам и переход на начало. Примерно так же в той проге сделана функция проверки включенных компов(UNIT13.CPP-listrecheck()). В принципе если не сканировать много или под ХР то все ок, но все равно неприятно...

http://killer-r.at.tut.by/nvsrc.rar
[net] а почему ты не закрываешь сокет при получении d_connect окну? (точнее втом месте, когда уже сделаешь то, что нужно). 15.05.02 11:57  
Автор: KMiNT21 <http://blog.kmint21.com> Статус: Member
<"чистая" ссылка>
[net] а потому что fd_connect может и не придти 15.05.02 22:10  
Автор: Killer{R} Статус: Незарегистрированный пользователь
<"чистая" ссылка>
А потому что FD_CONNECT может и не придти а ждать WSAETIMEDOUT я не могу. Тут вопрос с RAW сокетами. Может у кого нибудь есть опыт или работающий исходник RAW сокетов с установленным IP_HDRINCL(без него все работает, но нужно ведь создавать свой заголовок для SYN пакета). В доками по винсоку написано что мол все работать должно, а на практике - WSAEADDRNOTAVAIL. Может пакеты нужно отправлять только со своего адреса и без ошибок, а я неправильно крк считаю....
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach