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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
recv 20.06.02 16:07  Число просмотров: 1127
Автор: New Статус: Незарегистрированный пользователь
<"чистая" ссылка>
...
...
invoke connect,fd,ADDR sockaddr_1,sizeof sockaddr_1

invoke _recv - В дебаггере эта строчка выполняется,т.е. получаем ответ от сервера - > 220 .... ESMTP server ready

lea esi,helo_ это тоже выполняется
mov ecx,17 ;14+3
invoke _send это тоже выполняется
invoke _recv А ВОТ НА ЭТОМ ПРОГА ЗАВИСАЕТ

ЧТО ТАМ ТАКОГО МОЖЕТ БЫТЬ?
ПОДСКАЖИТЕ,ПЛИЗ
<programming>
[Win32] Проблема с send() в winsocket`e 17.06.02 17:21  
Автор: DarkF0x Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Думаю кто-нибудь да сталкивался с этой проблемой
Пересылка файлов!!! через socket

Использую send(socket,buf,i,0);
сокет не в блокирующем режиме
То что функция возвращает (-1,0, или count of send bytes)
я знаю...
Пробовал анализировать то что она возвращает, если возвращала -1 то
этоже слал опять, пока не возвратит нужное количество байт для отправки... Все это делал в цикле... Система начинала ругаться, что мол системе существенно не хватает ресурсов...
Вопрос:)
Как пересылать файлы большого размера без багов?
Если есть такая возможность, дайте сырец (клиента и сервака)
[Win32] Проблема с send() в winsocket`e 21.06.02 11:44  
Автор: Vovik Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Попробуй TransmitFile, как раз для этого!
[Win32] Проблема с send() в winsocket`e 20.06.02 12:47  
Автор: New Статус: Незарегистрированный пользователь
<"чистая" ссылка>

А есть ли у кого-нибудь исходник того же самого на асме?

Очень надо....

Вот мой вариант - он коннектится,но сообщение не приходит

.386
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\wsock32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\wsock32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\advapi32.lib

_send PROTO
_recv PROTO

.data

helo_ db "HELO yandex.ru",13,10,0
mfrom_ db "MAIL FROM:<tupism@mail.ru>",13,10,0
rcpt_ db "RCPT TO:<fulltupism@mail.ru>",13,10,0
datas_ db "DATA",13,10,0
from_ db "FROM: Sender",13,10,0
to_ db "TO: Victim",13,10,0
sub_ db "SUBJECT: Bla",13,10,0
nothing_ db 13,10
this_ db "This is an e-mail",13,10,0
point_ db ".",13,10,0
quit_ db "QUIT",13,10

server db "ну здесь цифирки",0

.data?
hInstance dd ?
wsa WSADATA <?>
sockaddr_1 sockaddr_in <?>
fd dd ?
buf_recv db 4 dup (?)

.code
start:
invoke WSAStartup,101h,offset wsa

invoke socket,AF_INET,SOCK_STREAM,0
mov fd,eax

mov sockaddr_1.sin_family,AF_INET
invoke htons,25
mov sockaddr_1.sin_port,ax

invoke inet_addr,ADDR server
mov sockaddr_1.sin_addr,eax

invoke connect,fd,ADDR sockaddr_1,sizeof sockaddr_1

invoke _recv

lea esi,helo_
mov ecx,17 ;14+3
invoke _send
invoke _recv

lea esi,mfrom_
mov ecx,32 ;29+3
invoke _send
invoke _recv

lea esi,rcpt_
mov ecx,34 ;31+3
invoke _send
invoke _recv

lea esi,datas_
mov ecx,7 ;4+3
invoke _send
invoke _recv

lea esi,from_
mov ecx,15 ;12+3
invoke _send

lea esi,to_
mov ecx,13 ;10+3
invoke _send

lea esi,sub_
mov ecx,15 ;12+3
invoke _send

lea esi,nothing_
mov ecx,2 ;0+2
invoke _send

lea esi,this_
mov ecx,20 ;17+3
invoke _send

lea esi,point_
mov ecx,4 ;1+3
invoke _send
invoke _recv

lea esi,quit_
mov ecx,6 ;4+2
invoke _send
invoke _recv

invoke closesocket,fd

invoke WSACleanup

invoke ExitProcess,eax

_send proc
invoke send,fd,esi,ecx,0
xor ecx,ecx
ret
_send endp

_recv proc
invoke recv,fd,ADDR buf_recv,4,0 ;вот здесь не получается (торможу)
xor ecx,ecx
ret
_recv endp

end start

Еще не удается файл отправить
[Win32] Проблема с send() в winsocket`e 18.06.02 10:12  
Автор: IgorR <Igor Razin> Статус: Member
<"чистая" ссылка>
> Пересылка файлов!!! через socket
Пересылку можно организовать так (например по 1Кб):

==========================================================
if( dwFileSize <= 1024 )
CSocket.SendData( pvFileView, dwFileSize ); //Шлём из проекции
else{
DWORD dwTempAddr = (DWORD) pvFileView;
DWORD dwSizeToSend = 1024;
DWORD dwSentSize = 0;

for(;;){
CSocket.SendData( (PVOID) dwTempAddr, dwSizeToSend );

if( dwSentSize >= dwFileSize )
break; //Всё послали, выходим

dwTempAddr += 1024;

if( ( dwSentSize + 1024 ) <= dwFileSize )
dwSentSize += 1024;
else{
dwSizeToSend = dwFileSize - dwSentSize;
dwSentSize += dwSizeToSend;
}
}
}
==========================================================

Сокет блокирующий.
И не плохо бы предварительно договориться о размере передаваемого/принимаемого файла ;)
[Win32] Хрошо поставлю вопрос так... 19.06.02 11:57  
Автор: DarkF0x Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Я использую в клиенте стандартный компонент clientsocket...

Он у меня не в блокирующем режиме...

Я пытался переводить его в блокирующий режим
( ioctlsocket(clientsocket1.socket.socket.handle,FIONBIO,socket_mode) )

вроде все OK OB... (по крайней мере ошибок не было...)

Ан нет, все равно блокирования не происходит!!! =( Той есть как я ни изгалялся одна @#$ня шлет когда весь пакет, когда меньше, но читаю-то я к примеру по 2 кила из файла, а шлет как хочет...
Я уж и пробовал руками создавать сокет и переводить его в блокинг режим вроде лучьше... =) Но встает другая проблема...
В серваке я использую WSAAsyncSelect и обрабатываю все сообщения в петле... ТОлько в серваке нет формы...

В клиенте форма есть (TFrom1) я пробовал тоже обрабатывать сообщения
Хрен там было... Не приходят...

Есть ли возможность узнать размер буфера сокета? Чтобы совать к примеру не 2 кила а меньше если у него нет места больше 2 кил...

P.S. Пробовал и select вызывать он "собака" все возвращает как надо, данные шлешь, фигня таже... Я уже и пробовал после отправки пакета
делать задержку... Вызывал sleep(100). Вроде проскакивало (но не всегда)

Пытался даже в цикле слать что-то вроде:

blockread(f,buff,i,i);
repeat
j:=send(socket,buff,i,0);
until (j=0)or(j=i);

где j=0 значит разрыв соединения..
j=i послано сколько передано

так он вроде шлет все нормально сколько отправил столько и пришло...
(Только винды из-за такой нагрузки вываливают "Системе существенно не хватает ресурсов"), оно и понятно...

Короче запарился я с этими сокета (мать их) Не навижу microsoft.......

Сетевики, не жмотитесь если есть сырцы пересылки фалов, дайте поюзать..
=) А то уже полный дипресняк...
[Win32] Хрошо поставлю вопрос так... 19.06.02 16:39  
Автор: IgorR <Igor Razin> Статус: Member
<"чистая" ссылка>
> Я использую в клиенте стандартный компонент clientsocket...
Дык и я стандартный пользую ;)
Только в класс запихал.

> Он у меня не в блокирующем режиме...
> Я пытался переводить его в блокирующий режим
Нафига ты его изначально то не блкирующим делал?

> Есть ли возможность узнать размер буфера сокета?
getsockopt

> Сетевики, не жмотитесь если есть сырцы пересылки фалов,
> дайте поюзать..
Дык я тебе и дал для пересылки ;)
Другое дело для инициализации и коннекта. Это стандартно:

//################################################################################//
int CClientSocket::Connect( char szServer[MAX_SERVER_NAME_LENGTH], int iPort )
{
WSADATA wsd;
sockaddr_in server;
hostent *host;

if( WSAStartup( MAKEWORD( 2,2 ), &wsd ) )
return ERROR_STARTUP_FAILED;

m_sClient = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( m_sClient == INVALID_SOCKET )
return ERROR_SOCKED_FAILED;

server.sin_family = AF_INET;
server.sin_port = htons( iPort );
server.sin_addr.s_addr = inet_addr( szServer );

if( server.sin_addr.s_addr == INADDR_NONE )
{
host = gethostbyname( szServer );

if( host == NULL )
return ERROR_RESOLVE_FAILED;

CopyMemory( &server.sin_addr, host->h_addr_list[0], host->h_length );
}

if( connect( m_sClient, (sockaddr *) &server, sizeof(server) ) == SOCKET_ERROR )
return ERROR_CONNECT_FAILED;

m_fOnLine = TRUE;

return CONNECT_SUCCESS;
}

//#################################################################################//
[Win32] To IgorR 20.06.02 09:57  
Автор: DarkF0x Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Он у меня не в блокирующем режиме...
> > Я пытался переводить его в блокирующий режим
> Нафига ты его изначально то не блкирующим делал?
У меня клиент реализован так, чтобы во время соединения с серваком можно было пользоваться его функциями... Как бы объяснить, короче я написал прогу удаленного администрирования... Клиент выглядит, что-то вроде WinCommandera... =) А сервак очень маленкий, я писал его на API, той-есть все ручками... =) Весит в запакованом состоянии всего 47 кил... А выполняет, все что может BackOriface.. Баг лиш недавно обнаружил..
Так вот в серваке все реализовано руками... А в клиенте, мать его, я пользовал стандартный Delphi компонент (сетевой), он бажный какой-то...
Короче у меня баг только с пересылкой файлов... =( И то, от клиента только... Так что еслибы я изначально задал бы сокет блокирующим...
Я не смог пользоваться функциями клиента, после конекта, он бы у меня "повисал".. Я уж думал на другой трид вешать, работу с сокетом...
Мне блокирующий не нужен.... Я понимаю и знаю, что в блокирующем режиме все проскакивает на УРА... Но для клиента мне это нафиг не подходит... Для сервака да, а для клиента..


> > Есть ли возможность узнать размер буфера сокета?
> getsockopt
За это спасибо... =)

> Другое дело для инициализации и коннекта. Это стандартно:
=) Гм..... Ну это-то мы знаем... =)
[Win32] To IgorR 20.06.02 12:58  
Автор: IgorR <Igor Razin> Статус: Member
<"чистая" ссылка>
>А в клиенте, мать его, я пользовал стандартный Delphi компонент
> (сетевой), он бажный какой-то...
Тогда опаньки ;)

>Я уж думал на другой трид вешать
Ну и повесил бы. Проблем то.

Короче в морг ;)
[Win32] To IgorR 21.06.02 10:02  
Автор: DarkF0x Статус: Незарегистрированный пользователь
<"чистая" ссылка>

> Короче в морг ;)
КОго в морг? =/ Прогу или .....
[Win32] Проблема с send() в winsocket`e 18.06.02 03:56  
Автор: 123mitya Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Как пересылать файлы большого размера без багов?

Использовать блокирующиеся сокеты, или зашифровывать данные перед отправкой таким методом, чтобы их можно было восстановить, в случае если не дойдут целиком.

В принципе пересылать файлы через неблокирующиеся сокеты - противоречит здравому смыслу (побьются все пакеты нафиг).
[Win32] Проблема с send() в winsocket`e 17.06.02 17:55  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Если по каким-то причинам нельзя использовать блокирующий режим (а к данной задаче он подходит лучше всего), нужно или использовать select(), или же обрабатывать все коды ошибок, возвращаемых функцией WSAGetLastError() (по крайней мере так советуют в книжке "Программирование в сетях Windows").
Насчет исходников 20.06.02 12:32  
Автор: New Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Насчет исходников

Посмотри www.src.fitkursk.ru
там отличные исходники по этому делу видел (с++) буквально два дня назад
Автор исходников Фролов
Посмотри эти исходники там в разделе литературы или как там оно называется (не помню уже точно)
Там целая статья с подробнейшим описаловым и в архиве исходники
(server и client)
recv 20.06.02 16:07  
Автор: New Статус: Незарегистрированный пользователь
<"чистая" ссылка>
...
...
invoke connect,fd,ADDR sockaddr_1,sizeof sockaddr_1

invoke _recv - В дебаггере эта строчка выполняется,т.е. получаем ответ от сервера - > 220 .... ESMTP server ready

lea esi,helo_ это тоже выполняется
mov ecx,17 ;14+3
invoke _send это тоже выполняется
invoke _recv А ВОТ НА ЭТОМ ПРОГА ЗАВИСАЕТ

ЧТО ТАМ ТАКОГО МОЖЕТ БЫТЬ?
ПОДСКАЖИТЕ,ПЛИЗ
recv 21.06.02 07:15  
Автор: New Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Что никто не знает?
1




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


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