2012-11-30 36 views
0

我想知道什麼是做這個帖子相反的最好方法: encode Netbios name python解碼NetBIOS名稱的Python

所以編碼,你可以這樣做:

encoded_name = ''.join([chr((ord(c)>>4) + ord('A')) 
       + chr((ord(c)&0xF) + ord('A')) for c in original_name]) 

但要解碼這個例如:

Netbios_Name= "\x46\x45\x45\x46\x46\x44\x45\x45\x46\x45\x45\x45\x45\x45\x46\x44\x46\x44\x46\x44\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41\x43\x41" 
## When correctly reversed, Netbios_Name should output in ASCII : "TESDTDDSSS" 

我雖然關於此功能的相反,但我不明白爲什麼它不工作。

謝謝!

回答

0

使用此功能(從dpkt source code拍攝):

def decode_name(nbname): 
    """Return the NetBIOS first-level decoded nbname.""" 
    if len(nbname) != 32: 
     return nbname 
    l = [] 
    for i in range(0, 32, 2): 
     l.append(chr(((ord(nbname[i]) - 0x41) << 4) | 
        ((ord(nbname[i+1]) - 0x41) & 0xf))) 
    return ''.join(l).split('\x00', 1)[0] 

所以:

>> decode_name(Netbios_Name).strip() 
'TESDTDDSSS' 
+0

謝謝,我看到過,但使用它像這樣將抓取他們的代碼。 – user1473508

+0

並且在您的應用程序中包含該庫是一個選項? ('from dpkt.netbios import decode_name') – dusan

+0

我正在嘗試構建一個不需要任何外部模塊的開源程序! 但是,謝謝你的建議,讚賞:) – user1473508