2016-11-24 1 views
0

Ich versuche, UDP-Pakete von einem RADIUS-Server zu analysieren, und ich habe verschiedene Tools wie Scapy, Pynids und Pypcap ausprobiert. Das Problem ist, einige der Radius-Attribute werden nicht richtig dekodiert und einige von ihnen sind. Was könnte die Ursache dafür sein?Python wie RADIUS-Server-Pakete zu analysieren?

Hier ist mein Code:

from scapy.all import sniff, Radius 

packets = sniff(iface='eth0', filter='udp', count=5) 
packet = packets[0] 

print packet.show() 

Und hier ist die Zusammenfassung der Ausgabe erhalte ich:

###[ Ethernet ]### 
    dst  = 94:57:a5:53:ab:70 
    src  = d4:ca:6d:ae:a0:66 
    type  = 0x800 
###[ UDP ]### 
    sport  = 38667 
    dport  = radius 
    len  = 205 
    chksum = 0x2bbd 
###[ Radius ]### 
    code  = Access-Request 
    id  = 80 
    len  = 197 
    authenticator= "T\xfb\x9c\t\x00 '\x14\xeb\x99\x84t\x9b\xb4\x83\x95" 
    \attributes\ 
    |###[ Radius Attribute ]### 
    | type  = Framed-Protocol 
    | len  = 6 
    | value  = '\x00\x00\x00\x01' 
    |###[ Radius Attribute ]### 
    | type  = NAS-Port 
    | len  = 6 
    | value  = '\x00\xf6\xa7\xf9' 
    |###[ Radius Attribute ]### 
    | type  = Called-Station-Id 
    | len  = 8 
    | value  = 'Dslam1' 
    |###[ Radius Attribute ]### 
    | type  = 87 
    | len  = 16 
    | value  = 'ether1-Dslam 1' 
    |###[ Radius Attribute ]### 
    | type  = Vendor-Specific 
    | len  = 24 
    | value  = '\x00\x00\x017\x0b\x12\x19\xfc4\xd01\xaf\x03\xd6\x0e!j\xa7H]\xdd;' 
    |###[ Radius Attribute ]### 
    | type  = NAS-Identifier 
    | len  = 15 
    | value  = 'TEH-P' 

Antwort

1

Für zukünftige Besucher dieses ist, wie ich die Pakete analysieren verwaltet.

Sie müssen in Ihrem aktuellen Verzeichnis eine Wörterbuchdatei erstellen oder ein Beispiel aus here verwenden, damit die Datentypen korrekt analysiert werden können.

from pyrad.packet import Packet 
from pyrad.dictionary import Dictionary 

from scapy.all import sniff, Radius 

def parse_packet(packet): 
    radius_packet = str(packet[Radius]) 
    pkt = Packet(packet=radius_packet, dict=Dictionary("dictionary")) 

    for key, value in pkt.iteritems(): 
     attr = pkt._DecodeKey(key) 
     value = pkt.__getitem__(attr) 
     print attr, value 

sniff(iface='eth0', prn=parse_packet, filter="udp", store=0) 

Dies ist eine Antwort Probe Ich habe:

User-Name [u'12345678'] 
NAS-IP-Address ['192.168.*.*'] 
NAS-Port [15853417] 
Service-Type ['Framed-User'] 
Framed-Protocol ['PPP'] 
Framed-IP-Address ['192.168.*.*'] 
Called-Station-Id [u'service4'] 
Calling-Station-Id [u'20:A7:5C:75:RA:TD'] 
NAS-Identifier [u'Test'] 
Acct-Status-Type ['Alive'] 
Acct-Delay-Time [0] 
Acct-Input-Octets [1003335] 
Acct-Output-Octets [15399190] 
Acct-Session-Id [u'81c2332b'] 
Acct-Authentic ['RADIUS'] 
Acct-Session-Time [76321] 
Acct-Input-Packets [15498] 
Acct-Output-Packets [21247] 
+0

Das funktionierte, aber ich bekomme die codierten Daten, wissen Sie, wie es zu entschlüsseln? – PachinSV

+0

@PachinSV Ist der Wert nicht bereits dekodiert? Wie die Antwort, die ich aufgenommen habe? –

+0

Ich bekomme Werte wie folgt: 80 [b '\ xac) bH \ x9c4L \ x04i \ xb2 \ x8a \ x9a ~ \ xe0 \ x95'] – PachinSV

Verwandte Themen