Winsock. Различить запрос.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Winsock. Различить запрос.

Сообщение ExiliM » 04.03.2010 (Чт) 0:17

Возможно ли как то различить полученные данные?
то есть например приняты данные, в виде "X" и "X" но одно из них является к примеру фраза для добавление в чат, а другое означает команду?(допустим передать файл).
з.ы либо самый оптимальный вариант "Х" который идёт в чат, отправлять пустым, а к команде добавлять какой нибудь знак/знаки? которые при получении будут проверятся сервером и отсеиваться?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16489
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Winsock. Различить запрос.

Сообщение Хакер » 04.03.2010 (Чт) 0:39

Человек, ты, что, издеваешься?

Тебе дали возможность передавать данные. Любые. Этого, что, мало? Не способен придумать протокол? Тогда брось заниматься этим.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Winsock. Различить запрос.

Сообщение iGrok » 04.03.2010 (Чт) 1:20

ExiliM писал(а):з.ы либо самый оптимальный вариант "Х" который идёт в чат, отправлять пустым, а к команде добавлять какой нибудь знак/знаки? которые при получении будут проверятся сервером и отсеиваться?

Нуу.. Зачатки протокола уже есть. Мысль пошла в правильном направлении. Но не понятно, почему она вдруг остановилась?
label:
cli
jmp label

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 05.03.2010 (Пт) 1:40

дык как я могу "придумать" протокол? если он уже придуман задолго до меня...мне просто нужно создать некую функцию, которая бы различала что куда пришло, и желательно с наименьшей потерей времени(скорости).
з.ы у меня под ником не стоит "Гуру" так что не нужно так сильно на меня налегать)
з.з.ы да кстати
Тогда брось заниматься этим.

что творишь!), и так безNetовские платформы скоро станут не востребованны, когда наберут скорость..а ты народу предлагаешь забить на всё)

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Winsock. Различить запрос.

Сообщение Денис » 05.03.2010 (Пт) 8:43

ExiliM писал(а):дык как я могу "придумать" протокол?

Значит, слухай сюды: Твой протокол будет пользовательским. Как OSCAR аськи, например. Понял теперь, о каком протоколе тут толкуют?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 05.03.2010 (Пт) 11:44

на сколько я понял из одной статьи.

FLAP — Frame Layer Protocol
В протоколе OSCAR, FLAP обспечивает работу с серверами на уровне TCP или слоя TLS. Каждое сообщение, посланное в или от клиента, заключено в структуре FLAP, которую легко идентифицировать, используя 6-ти байтовый заголовок, который сопровождается данными. Данные в FLAP — в большинстве случаев содеражат SNAC.


и

SNAC — Simple Network Atomic Communication
SNAC представляют сообщения протокола, которые посылают между собой клиент и сервер. Эти сообщения разделены на различные группы, в данной документации назваемые «foodgroup». В пределах каждой из группы есть различные виды сообщений, связанных с группой.


вначале отсылается блок состоящий из текста и заголовка, который по прибытии "Data_Arrival" проверяется заголовком, и на месте отсеивается?
так же проверяется структура, и неизвестная игнорируеся, то есть переходит как бы в окно чата?

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Winsock. Различить запрос.

Сообщение MIT » 05.03.2010 (Пт) 11:50

OSCAR был приведен в качестве примера клиентского протокола. Тебе совсем не обязательно делать тоже самое, сделай проще, по своим потребностям.
Например:
Код: Выделить всё
4 байта — идентификатор сессии связи
2 байта — тип сообщения
4 байта — длина тела сообщения
byte() — тело сообщения

Всё. Готово. Осталось только реализовать.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 05.03.2010 (Пт) 13:11

не совсем понял про идентификатор сессии связи, по какому принципу он будет определяться?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Winsock. Различить запрос.

Сообщение Денис » 05.03.2010 (Пт) 13:25

ExiliM писал(а):не совсем понял про идентификатор сессии связи, по какому принципу он будет определяться?


Это из-за непонимания ответа №1, данного Хакером. Вы открываете сессию связи. Вы присваиваете ей порядковый номер. Вы записываете порядковый номер в заголовок пакета. Вы формируете пакет. По Вашему стандарту Вы формируете. Пакет. Ну поймите уж это, наконец!
_________________

Единственное, что хотелось бы добавить к предложению MIT, это сигнатуру вашего протокола. Она должна идти вначале. Чтобы ваша программа сначала читала сигнатуру принятого пакета, и если это что-то левое, сразу отбрасывала.

Код: Выделить всё
N байт — сигнатура протокола (фиксированное строковое значение (рекомендуется использовать латиницу, чтобы бейсик не городил огород с уникодом)
4 байта — идентификатор сессии связи
2 байта — тип сообщения
4 байта — длина тела сообщения
byte() — тело сообщения


Как-то так:

Код: Выделить всё
Public Type PROTOKOL
    mdpSign as String(8)
    mdpSID as Long
    mdpMID as Integer
    mdpLength as Long
    mdpData() as Byte
End Type


Потом присваиваем сигнатуру и отправляем (это серверная часть)

Код: Выделить всё
Dim Packet as PROTOKOL

Packet.mdpSign = "PROTOKOL"


В клиентской части принимаем и смотрим сигнатуру:

Код: Выделить всё
if not Packet.mdpSign = "PROTOKOL" then exit sub

_________________

Ха-ха! Кстати! Я только что изобрел протокол PROTOKOL!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 05.03.2010 (Пт) 15:08

спасибо большое, наверняка приятно иногда помочь не знающему человеку ))
а вот вопрос такой...не может ли клиент подделать и послать "левый" пакет, который сервер распознает как "свой"?

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Re: Winsock. Различить запрос.

Сообщение Sirik » 05.03.2010 (Пт) 15:09

а если сообщение будет длинным (не помню точно вроде > 8Кб), то сообщение будет разрезано на куски, посему надо либо ограничить длину, либо собирать и потом только анализировать.

зы.
а вот вопрос такой...не может ли клиент подделать и послать "левый" пакет, который сервер распознает как "свой"?


конечно может) сделай, что в момент конекта клиента к серверу, ему присваивался какой-не будь рандомный номер-код
Состояний же любви — десять: любовный взгляд, привязанность в мыслях, рождение желания, бессонница, исхудание, отвращение к предметам восприятия, утрата стыда, безумие, потеря сознания и смерть — вот их признаки

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 05.03.2010 (Пт) 15:24

а если просто напросто c=a xor b?
и при получении обратно? вряд ли юзер додумается?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Winsock. Различить запрос.

Сообщение Денис » 05.03.2010 (Пт) 18:34

ExiliM писал(а):спасибо большое, наверняка приятно иногда помочь не знающему человеку ))
а вот вопрос такой...не может ли клиент подделать и послать "левый" пакет, который сервер распознает как "свой"?


Значит, слухай сюды: Если тебе нужна защита от дурака, то следуй совету Sirik, если же тебе нужна тру-Ъ-крипто-шифрация, то генерируй сертификаты и передавай шифрованные данные в пакетах. Даже если посторонний и сгенерирует пакет, похожий на твой, если у него не будет твоего ключа, он ничего не сможет передать.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 05.03.2010 (Пт) 19:33

всем спасибо) наконец то в этом разобрался)

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 07.03.2010 (Вс) 0:14

Вопрос такой, можно передать Тип? или обязательно показывать какой из элементов передавать, как тут?
имею ввиду например Dim Packet as ASX .........ws.SendData Packet? но на это ругается, а возмонжно как то легче сделать чем ниже?
Код: Выделить всё
Private Type ASX
Signature As String
DataLen As Byte
Data As String
End Type
Dim Packet As ASX

Function Set_Pack(message As String) As String
With Packet
.Signature = "ASX"
.DataLen = Len(.Data)
.Data = message
Set_Pack = .Signature & vbCrLf & .DataLen & vbCrLf & .Data
End With
End Function


и соответственно в клиенте:
Код: Выделить всё
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
ws.GetData Packet.Signature
If Not CRYPTO.Message_Decrypt(Packet.Signature) = "ASX" Then MsgBox "Packet is missing! Or bad signature!", vbCritical
End Sub


либо лучше загрузить весь пакет в переменную? и mid'om left'om и т.д уже разбивать?
то есть отправить весь тип клиенту в переменную?

Код: Выделить всё
Dim Incomming_Data As String
ws.GetData Incomming_Data


ps.
Crypto эт дллка котрая шифрует/дешифрует пакет, вообщем не суть.

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Re: Winsock. Различить запрос.

Сообщение BION » 07.03.2010 (Вс) 0:59

ExiliM,

Вот тут почитай: http://www.vbstreets.ru/VB/Articles/65986.aspx
В конце исходник.
Буээ!

ExiliM
Новичок
Новичок
Аватара пользователя
 
Сообщения: 47
Зарегистрирован: 22.02.2010 (Пн) 4:41

Re: Winsock. Различить запрос.

Сообщение ExiliM » 07.03.2010 (Вс) 1:03

О, спасиб..


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 17

    TopList  
cron