0
我有以下的功能,即從UDP
插槽讀取,並追加到一個字符串data
:解壓需要長度43的字符串參數 - Python的
DATA_SIZE = 2048
def handle_read(self):
"""
This handles the incoming ntp response
"""
try:
data = ""
while 1:
current_data, _ = self.recvfrom(self.DATA_SIZE)
self.log.info("msg: %s" % current_data)
(header, length, typeID, param1, param2,
param3, param4, name_string, checksum, footer,
) = struct.unpack("!2B I 4H 24s I B", current_data)
print (header, length, typeID, param1, param2,
param3, param4, name_string, checksum, footer,
)
if not current_data:
break
data += current_data
self.log.info(data)
# parse with the pysnmp into a summary
except Exception, e:
self.log.exception("The following exception happened: %s" % e)
finally:
self.handle_close()
當我執行的代碼我得到:
File "hello.py", line 67, in handle_read
) = struct.unpack("!2B I 4H 24s I B", current_data)
error: unpack requires a string argument of length 43
我試着調整字符串參數的大小,但有相同的錯誤。該功能的基本功能是從self.recvfrom()
中讀取並追加到data
。有人可以幫忙嗎? 的self.recvfrom()
的結構是在一對像:
0xpublic?kC0^0+>Linux manager 3.4.30 #1 SMP Wed Sep 3 11:31:42 UTC 2014 x86_64+C?R?
('1.2.3.4', 161)
這是SNMP消息我發現了從服務器返回,並且我與之通信的服務器的IP。這個想法是將SNMP MIB附加到該字符串中。
數據的大小必須與您的格式說明符相匹配。它沒有。我不確定我們在這裏能夠幫到什麼。 – NPE 2014-10-01 16:45:53
您可以擴展如何'self.recvfrom(self.DATA_SIZE)'的結構預計看起來像,以及如何你希望'struct.unpact'修改它之前追加到數據? – 2014-10-01 16:49:45
@ user3197452我會發布樣本... – cybertextron 2014-10-01 16:53:11