2016-11-24 1 views
0

RADIUS 서버에서 UDP 패킷을 구문 분석하려고하는데 Scapy, Pynids 및 pypcap을 포함한 다른 도구를 사용해 보았습니다. 문제의 일부는 Radius-Attributes가 올바르게 디코딩되지 않았고 일부는 디코딩 된 것입니다. 이것의 원인이 무엇일까요?파이썬은 어떻게 RADIUS 서버 패킷을 파싱합니까?

여기 내 코드입니다 :

from scapy.all import sniff, Radius 

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

print packet.show() 

그리고 여기 얻을 출력의 요약이다 : 미래 방문자를위한

###[ 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' 

답변

1

이 내가 패킷을 분석하는 관리 방법이다.

현재 디렉토리에 사전 파일을 만들거나 here의 예제를 사용하여 데이터 유형을 올바르게 구문 분석 할 수 있어야합니다. 당신이 그것을 해독하는 방법을 알고,이 일

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

,하지만 난 인코딩 된 데이터를 얻을 :

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) 

이 내가 가진 응답 샘플입니다? – PachinSV

+0

@PachinSV 이미 디코드 된 값이 아닌가? 내가 포함시킨 응답처럼? –

+0

다음과 같은 값을 얻을 수 있습니다 : 80 [b '\ xac] bH \ x9c4L \ x04i \ xb2 \ x8a \ x9a] \ 012 \ x96 \ x95 \] – PachinSV

관련 문제