Вверх ↑
Этот топик читают: Гость
Гость
Ответов: 17029
Рейтинг: 0
#16: 2013-03-02 14:31:19 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2025-01-17 15:24:01
карма: 0

0
Ответов: 50
Рейтинг: 2
#17: 2013-03-02 19:26:44 ЛС | профиль | цитата
Что он в ответ получает вообще пофигу.Обрабатывать ответ не обязательно.

карма: 0

0
Ответов: 655
Рейтинг: 18
#18: 2013-03-02 23:39:13 ЛС | профиль | цитата
Gorgar, ну значит то что шлет.."поймай" есть анализаторы сетевых пакетов.
У меня нет телека) "налови" пакетов с командами и попробуем что-нить сделать, самому интересно)
карма: 0

0
Ответов: 50
Рейтинг: 2
#19: 2013-03-04 13:47:53 ЛС | профиль | цитата
Ну наловить то можно, но зачем? Когда известен алгоритм.

------------ Дoбавленo в 23.48:
Вот кстати ещё один скрипт на питоне
import socket
import base64
import time, datetime

#IP Address of TV
tvip = "192.168.137.3"
#IP Address of PC
myip = "192.168.137.1"
#Used for the access control/validation, but not after that AFAIK
mymac = "00-11-6B-93-C1-9B"
#What the iPhone app reports
appstring = "iphone..iapp.samsung"
#Might need changing to match your TV type
tvappstring = "iphone.UE55C8000.iapp.samsung"
#What gets reported when it asks for permission
remotename = "Python Samsung Remote"

# Function to send keys
def sendKey(skey, dataSock, appstring):
messagepart3 = chr(0x00) + chr(0x00) + chr(0x00) + chr(len(
base64.b64encode(skey))) + chr(0x00) + base64.b64encode(skey);
part3 = chr(0x00) + chr(len(appstring)) + chr(0x00) \
+ appstring + chr(len(messagepart3)) + chr(0x00) + messagepart3
dataSock.send(part3);

# Open Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((tvip, 55000))



# First configure the connection
ipencoded = base64.b64encode(myip)
macencoded = base64.b64encode(mymac)
messagepart1 = chr(0x64) + chr(0x00) + chr(len(ipencoded)) \
+ chr(0x00) + ipencoded + chr(len(macencoded)) + chr(0x00) \
+ macencoded + chr(len(base64.b64encode(remotename))) + chr(0x00) \
+ base64.b64encode(remotename)

part1 = chr(0x00) + chr(len(appstring)) + chr(0x00) + appstring \
+ chr(len(messagepart1)) + chr(0x00) + messagepart1
sock.send(part1)

messagepart2 = chr(0xc8) + chr(0x00)
part2 = chr(0x00) + chr(len(appstring)) + chr(0x00) + appstring \
+ chr(len(messagepart2)) + chr(0x00) + messagepart2
sock.send(part2)

# Now send the keys as you like, e.g.,
sendKey("KEY_VOLUP",sock,tvappstring)
time.sleep(1)

# Close the socket when done
sock.close()

Сейчас пытаюсь на паскаль его перевести.Только получаю пока кучу ошибок вида:Incompatible types: 'String' and 'PChar'


------------ Дoбавленo в 13.47:
Гуру подскажите, строку содержащую chr(0) дальще chr(0) из IC никак не передать?
Всегда будет резатся?
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#20: 2013-03-04 13:56:39 ЛС | профиль | цитата
Gorgar писал(а):
Гуру подскажите, строку содержащую chr(0) дальще chr(0) из IC никак не передать?Всегда будет резатся?

В дельфях можно указать явную длину строки при помощи Setlength(str), и тогда туда можно пихать весь набор символов ASCII, включая и chr(0)
карма: 22

0
Ответов: 4672
Рейтинг: 768
#21: 2013-03-04 14:04:05 ЛС | профиль | цитата
Gorgar, никакой мороки со строками там нет: по TCP шлется массив байт. Создаешь этот массив, пихаешь в него любые байты, в том числе и строки и отправляешь. Только нужно научится правильно работать с динамическим массивом и копировать байты из строки в массив.
карма: 26

0
Ответов: 50
Рейтинг: 2
#22: 2013-03-04 14:39:14 ЛС | профиль | цитата
nesco писал(а):
В дельфях можно указать явную длину строки при помощи Setlength(str), и тогда туда можно пихать весь набор символов ASCII, включая и chr(0)

всё равно режется
#pas
msg := chr($64) + EncodeBase64(IP_adr) + chr($0);
msg := msg + '222';
SetLength(msg, 21);
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#23: 2013-03-04 14:43:03 ЛС | профиль | цитата
Gorgar писал(а):
всё равно режется

А куда это все выводится
карма: 22

0
Ответов: 50
Рейтинг: 2
#24: 2013-03-04 14:49:27 ЛС | профиль | цитата
nesco писал(а):
А куда это все выводится

code_30500.txt
карма: 0

0
файлы: 1code_30500.txt [2.4KB] [99]
Разработчик
Ответов: 26324
Рейтинг: 2148
#25: 2013-03-04 14:54:34 ЛС | профиль | цитата
А с каких это пор интерфейсные элементы понимают chr(0) Все там нормально проходит

Add(MainForm,2953706,259,168)
{
}
Add(InlineCode,14058540,336,259)
{
WorkPoints=#4:Conv|
EventPoints=#7:onEvent|8:onEvent1|
VarPoints=#6:Result|7:Result1|
DataPoints=#6:DestIP|5:SrcIP|6:SrcMAC|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses Kol,Share,Debug;|2: |4:type|28: THiAsmClass = class(TDebug)|10: private|17: msg: String;|17: pkt: String;|9: public|22: DestIP:THI_Event;|21: SrcIP:THI_Event;|22: SrcMAC:THI_Event;|23: onEvent:THI_Event;|25: onEvent1:THI_Event; |48: procedure Conv(var Data:TData; Index:word);|50: procedure Result(var Data:TData; index:word);|62: procedure Result1(var Data:TData; index:word); |4:end;|0:|14:implementation|5: |0:|51:function EncodeBase64(const inStr: string): string;|0:|38: function Encode_Byte(b: Byte): char;|7: const|28: Base64Code: string[64] =|73: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';|7: begin|40: Result := Base64Code[(b and $3F)+1];|6: end;|0:|3:var|13: i: Integer;|5:begin|9: i := 1;|15: Result := '';|29: while i <= Length(InStr) do|7: begin|57: Result := Result + Encode_Byte(Byte(inStr[i]) shr 2);|87: Result := Result + Encode_Byte((Byte(inStr[i]) shl 4) or (Byte(inStr[i+1]) shr 4));|32: if i+1 <= Length(inStr) then|90: Result := Result + Encode_Byte((Byte(inStr[i+1]) shl 2) or (Byte(inStr[i+2]) shr 6))|8: else|29: Result := Result + '=';|32: if i+2 <= Length(inStr) then|54: Result := Result + Encode_Byte(Byte(inStr[i+2]))|8: else|29: Result := Result + '=';|14: Inc(i, 3);|6: end;|4:end;|51:///////////////////////////////////////////////////|0:|27:procedure THiAsmClass.Conv;|4: var|16: IP_adr: string;|5:begin|32:IP_adr := ToStringEvent(DestIP);|0:|58:msg := chr($64) + EncodeBase64(IP_adr) + chr(0) + '111';|19:msg := msg + '222';|19:SetLength(msg, 24);|27: _hi_onEvent(onEvent, msg);|32: _hi_onEvent(onEvent1, '123'); |4:end;|2: |29:procedure THiAsmClass.Result;|5:begin|22: dtString(Data, msg);|4:end;|0:|30:procedure THiAsmClass.Result1;|5:begin|20:// dtReal(Data, b);|4:end;|0:|4:end.|
link(onEvent,6485020:doConvert,[])
link(onEvent1,2948977:doText,[(388,272)(388,314)])
link(DestIP,6310376:Text,[])
}
Add(Timer,11234882,266,259)
{
link(onTimer,14058540:Conv,[])
}
Add(Label,11919236,471,259)
{
Left=5
Top=90
Width=265
}
Add(Label,2948977,471,308)
{
Left=5
Top=115
Width=180
}
Add(Edit,6310376,336,168)
{
Left=5
Top=10
Width=85
Text="192.168.0.1"
}
Add(StreamConvertor,6485020,413,259)
{
Mode=5
link(onResult,11919236:doText,[])
}


карма: 22

0
Ответов: 50
Рейтинг: 2
#26: 2013-03-04 15:14:19 ЛС | профиль | цитата
nesco, Спасибо, затупил
А как бы подружить String и PChar такого извращённого вида chr(StrLen(EncodeBase64(IP_adr)))?
Компилятор кроет матом:Error: Incompatible types: 'String' and 'PChar'

карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#27: 2013-03-04 15:21:51 ЛС | профиль | цитата
Gorgar писал(а):
А как бы подружить String и PChar такого извращённого вида chr(StrLen(EncodeBase64(IP_adr)))?

А в принципе, зачем это надо, когда строки можно спокойно суммировать
В своем IC ты же так и сделал, зачем тебе PChar PChar в дельфях -- это указатель на массив символов
карма: 22

0
Ответов: 50
Рейтинг: 2
#28: 2013-03-04 15:43:40 ЛС | профиль | цитата
nesco писал(а):
А в принципе, зачем это надо, когда строки можно спокойно суммировать

А как ещё можно определить длину строки помимо StrLen?
карма: 0

0
Ответов: 4672
Рейтинг: 768
#29: 2013-03-04 15:46:19 ЛС | профиль | цитата
nesco писал(а):
строки можно спокойно суммировать

Там не идет сумирование. Приведенный фрагмент просто вычисляет длину строки, представляющей IP-адрес в Base64, приводит её к типу byte (а точнее, char) для последующей записи в массив. По-нашему:
Byte(Length(EncodeBase64(IP_adr)))

карма: 26

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#30: 2013-03-04 15:52:25 ЛС | профиль | цитата
Gorgar писал(а):
А как ещё можно определить длину строки помимо StrLen?

Length(str)

------------ Дoбавленo в 15.52:
Netspirit писал(а):
Byte(Length(EncodeBase64(IP_adr)))

А не правилнее ли для массива символов, все же -- Chr(Length(EncodeBase64(IP_adr)))
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)