Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2011, 12:34   #1
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию Поиск ошибки в Python-коде [парсинг запроса и генерация ответа WebSocket]

Доброго всем времени суток.
Знаю, что пишу не в том разделе, но что поделать, если нету раздела для Python-программистов (или хотя бы для других языков, не имеющих свои разделы).
Собственно, захотелось написать парсер для запроса из WebSocket. Писал по алгоритму из википедии, но результат конечного парсера отличается от результата в википедии. Либо я допустил глупую ошибку, либо неправильно понял алгоритм. Прошу помочь.
Вот код:
Код:
import re, struct, hashlib

def toBigEndianBytes(value):
	result = []
	while value > 0:
		result += [value % 0x100]
		value >>= 8
	return result

def calculateKeyString(value):
        #1. из строки со значением заголовка запроса Sec-WebSocket-Key1 исключить все символы, не являющиеся цифрами (не попадающие в диапазон '0'..'9');
        #2. полученную строку превратить в 64-битное целое число (для примера выше получим 1299853100);
	result = int("".join(re.findall(r"\d", value)))
	#3. полученное число разделить целочисленным делением на количество пробелов в исходной строке со значением заголовка;
	result = result/len(re.findall(r" ", value))
        #4. полученное число представить в виде 4-х байтового 32-битного числа в формате big endian: старший байт хранится по нулевому смещению;
	result = toBigEndianBytes(result)
	value, result = result, ""
	for i in value:
		result += chr(i)
	return result
	
Key1 = calculateKeyString("12998 5 Y3 1 .P00")
Key2 = calculateKeyString("4 @1 46546xW%0l 1 5")
#6. интерпретируя числа из пунктов 4) и 5) как 4-х байтовые строки, конкатенировать их (сложить в одну строку) и добавить как строку тело запроса;
#7. вычислить от полученной 16-байтной строки значение MD5 и записать это значение в тело ответа "как есть", без преобразования в какое-либо представление;
m = hashlib.md5()
m.update(Key1+Key2+"^n:ds[4U")
print m.digest()
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi и генерация запроса на ЭЦП Dr_Cuker Общие вопросы Delphi 6 04.05.2011 15:31
Не могу понять ошибки Python 2.7.1 alexssey163 Python 1 26.03.2011 21:44
Поиск в коде ошибки. Повторяется бесконечно! Человек_Борща Общие вопросы Delphi 9 16.01.2011 01:27
мелкие Ошибки в коде T@tali Паскаль, Turbo Pascal, PascalABC.NET 10 10.01.2011 21:55
поиск ответа BUMPER Помощь студентам 0 18.06.2010 21:12