About Forum Blogs NOC Docs Downloads KB Issues Code CI Registration

nocproject.org

#nocproject.org at irc.freenode.net log.
Back to nocproject.org Back to IRC log index
Date: 15.11.2014
mikevlz|2 #
10:46
и библиотека snmp ведь неготова была к большим пакетам...
10:47
много данных не влазячт в 7 бит кодирования длины сообщения - трейс вам NotImplementedError
10:51
ну или патчить как-то так http://pastebin.com/jTCMAJPp файлик lib/snmp/ber.py
15:03
dvolodin: http://pastebin.com/jTCMAJPp посмотри творчество
15:03
а то протухнет через месяц
dvolodin #
15:15
это где такое?
15:16
в графите тот кусок запатчен по-другому
mikevlz|2 #
15:19
ну я графит дергал давно, мож уже и запатчено, не проверял
dvolodin #
15:40
покажи diff с оригинальной версией
15:41
что правил-то?
mikevlz|2 #
15:54
от @todo до #raise NotImplementedError()
15:55
а то больше 3 оидов нельзя было в snmpget pdu засунуть, в 127 байт не влазило :)
15:56
там много лишнего, я это прекрасно понимаю, говнокод, короче, но дело делает
dvolodin #
15:59
lenhex="%04X"%l
15:59
octs=int(len(lenhex)/2)
15:59
это ты со зла
15:59
количество октетов считаешь?
mikevlz|2 #
15:59
да, причем зря.
16:00
хотя не, не зря
16:00
надо же число байтов +128 первым вписать, а потом длину
dvolodin #
16:00
linhex всегда у тебя == 4
16:00
:)
mikevlz|2 #
16:00
мда?
16:01
а ты уверен, или так, неподумав, сказал?
dvolodin #
16:01
>>> "%04X" % 0
16:01
'0000'
16:01
>>> "%04X" % 500
16:01
'01F4'
mikevlz|2 #
16:02
>>> s="%04X"% 123456789
16:02
>>> s
16:02
'75BCD15'
16:02
16:02
как видишь, не всегда
dvolodin #
16:02
при том, что это длина
mikevlz|2 #
16:02
первый случай обходится условием выше по тексту
16:03
хотя может я и неправ где-то :)
16:03
я же не настоящий сварщик
16:04
но в целом да, длина может быть больше 127, при этом будет занимать один байт, а я займу два, кто-то из катез может и не понять меня
16:04
китаёз*
dvolodin #
16:05
def parse_length(self, msg):
16:05
v = ord(msg[0])
16:05
if v & 0x80:
16:05
# Long form
16:05
l = v & 0x7f
16:05
v = 0
16:05
for c in msg[1:1 + l]:
16:05
v += (v << 8) + ord(c)
16:05
return v, msg[1 + l:]
16:05
else:
16:05
# Short form
16:05
return v, msg[1:]
16:05
в обратную сторону у нас так
16:08
n = 0
16:08
while i:
16:08
n += 1
16:08
i >>= 8
16:08
я думаю, лучше как-то так считать
mikevlz|2 #
16:09
токмо дальше мне один хрен проще из hex string выковырять int, чем мучаться с делениями и остатками :)
16:10
а так - да
16:11
однако опять же я дергаю не меньше 10 оидов с железяки, там длина больше 256, так что два байта имею, поправлю на селдующей неделе
dvolodin #
16:13
не
16:13
все не так
16:16
http://pastebin.com/35wzKL1g
16:16
вот так веселее
16:16
;)
mikevlz|2 #
16:18
то есть не было у тебя длинной формы encode_tlv
16:18
а нахрен лишний модуль дергал?
dvolodin #
16:19
struct?
mikevlz|2 #
16:19
угу
dvolodin #
16:19
а ты посмотри, там все на нем
mikevlz|2 #
16:19
да понятно...
dvolodin #
16:19
struct.pack размазывает число в строку с октетами
16:19
и тут же срезаем нули слева
mikevlz|2 #
16:20
просто периодически вижу твою сильную любовь к дополнительным модулям, думаю, а чо собственную реализацию не забабахал?
16:20
шутка, если чо
16:22
так... а эта вундервафля нормально отработает, если длина данных будет в диапазоне 128-255?
16:23
по идее должна будет выдать 0xF1 и один байт этой самой длины
dvolodin #
16:25
да
16:25
struct -- стандартный модуль
mikevlz|2 #
16:25
ну тогда супер
dvolodin #
16:25
и много где используется
16:27
>>> struct.pack("!Q", 129).lstrip("\x00")
16:27
'\x81'
16:27
>>> struct.pack("!Q", 300).lstrip("\x00")
16:27
'\x01,'
16:27
>>> struct.pack("!Q", 1000).lstrip("\x00")
16:27
'\x03\xe8'
mikevlz|2 #
16:27
не
16:28
если длина 129, то на выходе должны быть 0x81 0x81. Первое показывает, что длина больше 127 и сколько байт следом за ней собсно длина
16:28
а второе уже будет длина =)
16:29
стоп
16:29
или не стоп?
16:30
короче, для 129 на выходе должны быть два байта, для 500 должно быть три байта на выходе
16:30
а, всё
16:31
простите, дяденька, к концу рабочего дня туплю
Tweet
Share this page
Share this page: Tweet