2017-08-04 70 views
0

獲取套接字數據在Python

我一直停留在這個現在一段時間(我在python寫這篇) 。但是,我無法從中獲取正確的數據。我的一位同事寫了一個UDP收集器(以golang的形式),並收到下面的輸出:(關鍵區別將加粗)

%(EXTRA chan_service.Request = {1501844689333211815 0 STATS user-master-01 172.22.64.123 30真[8 1 16 10 24 100 32 232 7]})

我然而得到這樣的數據:

{ 「unix_time」:1501844534270295150 「proto_name」: 「STATS」, 「HOST_NAME」: 「user-master-01」,「host_ip」:「172.22.64.123」,「expiration」:30,「is_delta」:true,「tm_data」:「CAEQChhkIOgH」}

關於爲什麼我沒有收到tm_data的同樣條目的任何想法?

這裏是我的代碼:

def udp_port_data(port): 

    sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
    sock.bind(("", port)) 
    print "\n\nThe connection to the port has been established\n\n" 

    data, addr = sock.recvfrom(65535) 
    print "\n\nThe data has been received from the port\n\n" 

    print "The data is : ", data 

    sock.close() 

回答

0

看來,tm_data是base64編碼和GO實現其解碼爲數字的列表。我得到了與此相同的結果:

import json 
import base64 

data = '{"unix_time":1501844534270295150,"proto_name":"STATS","host_name":"mhegglin-master-01","host_ip":"172.22.64.123","expiration":30,"is_delta":true,"tm_data":"CAEQChhkIOgH"}' 

x = json.loads(data) 
print [ord(c) for c in base64.decodestring(x['tm_data'])] 
+0

謝謝!這真的有幫助! – mhegglin

0

玩過我的代碼後,我發現這對我的目的更好。

buff = json_data["tm_data"].decode('base64', "strict") 

不過,感謝您指出它是用base64編碼的!