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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Net] Глюки с большим количеством сокетов. 13.05.02 14:01  Число просмотров: 977
Автор: ih8u <i hate you> Статус: Member
<"чистая" ссылка>
ХаХа :))
ну ты проколист,
есно количество сокетов ограничено, вот в этом всё и дело!
Да и зачем те интересно содавать 40000 сокетов?? :)))
<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