如何将 Raw 部分从 pcap 文件转换为正常格式?

How to convert the Raw part to normal format from a pcap file?

>>> pkts[0].show()

###[ Ethernet ]###
dst       = 00:00:5e:00:01:32
src       = 00:01:d7:ea:ec:45
type      = IPv4
###[ IP ]###
 version   = 4L
 ihl       = 5L
 tos       = 0x0
 len       = 523
 id        = 56882
 flags     = DF
 frag      = 0L
 ttl       = 255
 proto     = udp
 chksum    = 0x8738
 src       = 221.131.232.12
 dst       = 10.212.68.18
 \options   \
###[ UDP ]###
    sport     = radius_acct
    dport     = radius_acct
    len       = 503
    chksum    = 0xdda4
###[ Raw ]###
       load      = '\x04;\x01\xefna\r\xa5\xb0w\x05\xbaU]t\x9a9k\x1c<\x01\x0fwzcna06629197\x05\x06\x01!e\x9f\x04\x06\xdd\x83\xe8\x0c\x08\x06\n\x9e\xfd\x9b\x0b\nnat-hsi1 \x1fZJWZH-MC-CMNET-BRAS12-CN_ME60(\x06\x00\x00\x00\x03)\x06\x00\x00\x00\x00*\x06$\x1d|o+\x06g\x88\xe3L,#ZJWZH-M01222175401439efd39c069285-\x06\x00\x00\x00\x01.\x06\x00\x03\xa0 /\x06\x00c\xbeC0\x06\x00\x9dq04\x06\x00\x00\x00\x005\x06\x00\x00\x00\x037\x06S\xbbGk=\x06\x00\x00\x00\x0f\x1f\x13c8:3a:35:4f:30:d8W4slot=1;subslot=2;port=22;vlanid=1439;vlanid2=1754;\x06\x06\x00\x00\x00\x02\x07\x06\x00\x00\x00\x013\x06\x00\x00\x00\x00\x1c\x06\x00\x00\x00\x00\x1b\x06\x00\t:\x80\x1a\xc1\x00\x00\x07\xdb<"10.158.253.155 c8:3a:35:4f:30:d8\x03\x06\x00@\x02\xb8\x02\x06\x00@\x02\xb8\x06\x06\x00@\x02\xb8\x05\x06\x00@\x02\xb8\x16\x06\x00\x00\x00\x0f\x1a\x06\x00\x01\x0e\xa5\x8a\x08nat444T\x06\x00\x00\x00\x00=\x06\x00\x00\x00\x0f>\x06\x00\x00\x00\x0f\x90\x06\x00\x00\x00\x00\x91\x06\x00\x00\x00\x00\x92\x06\x00\x00\x00\x00\x93\x06\x00\x00\x00\x00\x94\x06\x00\x00\x00\x00\x95\x06\x00\x00\x00\x00\x99\x13c8:3a:35:4f:30:d8\x9f\x06\x00\x00\x00\x00\x01\x06\x01@\x00\x00M\x06\x00_\xc2\x88\xa1\x06\xb7\xf5#]\xa2\x06\x00\x004\x00\xa3\x06\x00\x00C\xff'

上面的输出是从python scapy解析的,[Raw]部分是我关心的。我需要识别 [Raw] 部分中的每个字段然后对其进行修改,有人可以帮忙吗?谢谢!

更新

Scapy 直到 v2.3.1 只有基本的 Radius 层没有注册到 scapy 以基于 radius 端口进行自动 radius 解剖。跳至末尾查看此问题的原始答案,参考 scapy<=2.3.1.

Scapy v2.3.2 带有 Radius 和 Radius 属性层,它们绑定到 radius 端口以进行自动解剖。因此请更新scapy并重试。

pip install --upgrade scapy

这是使用此版本的 scapy 剖析的数据:

 Radius(data).show()
###[ Radius ]###
  code= Accounting-Request
  id= 59
  len= 495
  authenticator= 'na\r\xa5\xb0w\x05\xbaU]t\x9a9k\x1c<'
  \attributes\
   |###[ Radius Attribute ]###
   |  type= User-Name
   |  len= 15
   |  value= 'wzcna06629197'
   |###[ Radius Attribute ]###
   |  type= NAS-Port
   |  len= 6
   |  value= '\x01!e\x9f'
   |###[ Radius Attribute ]###
   |  type= NAS-IP-Address
   |  len= 6
   |  value= '\xdd\x83\xe8\x0c'
   |###[ Radius Attribute ]###
   |  type= Framed-IP-Address
   |  len= 6
   |  value= '\n\x9e\xfd\x9b'
   |###[ Radius Attribute ]###
   |  type= Filter-Id
   |  len= 10
   |  value= 'nat-hsi1'
   |###[ Radius Attribute ]###
   |  type= NAS-Identifier
   |  len= 31
   |  value= 'ZJWZH-MC-CMNET-BRAS12-CN_ME60'
   |###[ Radius Attribute ]###
   |  type= Acct-Status-Type
   |  len= 6
   |  value= '\x00\x00\x00\x03'
   |###[ Radius Attribute ]###
   |  type= Acct-Delay-Time
   |  len= 6
   |  value= '\x00\x00\x00\x00'
   |###[ Radius Attribute ]###
   |  type= Acct-Input-Octets
   |  len= 6
   |  value= '$\x1d|o'
   |###[ Radius Attribute ]###
   |  type= Acct-Output-Octets
   |  len= 6
   |  value= 'g\x88\xe3L'
   |###[ Radius Attribute ]###
   |  type= Acct-Session-Id
   |  len= 35
   |  value= 'ZJWZH-M01222175401439efd39c069285'
   |###[ Radius Attribute ]###
   |  type= Acct-Authentic
   |  len= 6
   |  value= '\x00\x00\x00\x01'
   |###[ Radius Attribute ]###
   |  type= Acct-Session-Time
   |  len= 6
   |  value= '\x00\x03\xa0 '
   |###[ Radius Attribute ]###
   |  type= Acct-Input-Packets
   |  len= 6
   |  value= '\x00c\xbeC'
   |###[ Radius Attribute ]###
   |  type= Acct-Output-Packets
   |  len= 6
   |  value= '\x00\x9dq0'
   |###[ Radius Attribute ]###
   |  type= 52
   |  len= 6
   |  value= '\x00\x00\x00\x00'
   |###[ Radius Attribute ]###
   |  type= 53
   |  len= 6
   |  value= '\x00\x00\x00\x03'
   |###[ Radius Attribute ]###
   |  type= 55
   |  len= 6
   |  value= 'S\xbbGk'
   |###[ Radius Attribute ]###
   |  type= NAS-Port-Type
   |  len= 6
   |  value= '\x00\x00\x00\x0f'
   |###[ Radius Attribute ]###
   |  type= Calling-Station-Id
   |  len= 19
   |  value= 'c8:3a:35:4f:30:d8'
   |###[ Radius Attribute ]###
   |  type= 87
   |  len= 52
   |  value= 'slot=1;subslot=2;port=22;vlanid=1439;vlanid2=1754;'
   |###[ Radius Attribute ]###
   |  type= Service-Type
   |  len= 6
   |  value= '\x00\x00\x00\x02'
   |###[ Radius Attribute ]###
   |  type= Framed-Protocol
   |  len= 6
   |  value= '\x00\x00\x00\x01'
   |###[ Radius Attribute ]###
   |  type= Acct-Link-Count
   |  len= 6
   |  value= '\x00\x00\x00\x00'
   |###[ Radius Attribute ]###
   |  type= Idle-Timeout
   |  len= 6
   |  value= '\x00\x00\x00\x00'
   |###[ Radius Attribute ]###
   |  type= Session-Timeout
   |  len= 6
   |  value= '\x00\t:\x80'
   |###[ Radius Attribute ]###
   |  type= Vendor-Specific
   |  len= 193
   |  value= '\x00\x00\x07\xdb<"10.158.253.155 c8:3a:35:4f:30:d8\x03\x06\x00@\x02\xb8\x02\x06\x00@\x02\xb8\x06\x06\x00@\x02\xb8\x05\x06\x00@\x02\xb8\x16\x06\x00\x00\x00\x0f\x1a\x06\x00\x01\x0e\xa5\x8a\x08nat444T\x06\x00\x00\x00\x00=\x06\x00\x00\x00\x0f>\x06\x00\x00\x00\x0f\x90\x06\x00\x00\x00\x00\x91\x06\x00\x00\x00\x00\x92\x06\x00\x00\x00\x00\x93\x06\x00\x00\x00\x00\x94\x06\x00\x00\x00\x00\x95\x06\x00\x00\x00\x00\x99\x13c8:3a:35:4f:30:d8\x9f\x06\x00\x00\x00\x00\x01\x06\x01@\x00\x00M\x06\x00_\xc2\x88\xa1\x06\xb7\xf5#]\xa2\x06\x00\x004\x00\xa3\x06\x00\x00C\xff'

原始答案引用 scapy <=2.3.1

Scapy 带有基本的 Radius 层,但它们似乎没有自动绑定到 radius 端口。这意味着您必须 a) 手动将 [Raw] 层分解为 Radius() 或 b) 将半径层绑定到 radius-acct 端口。

radius-acct     1813/tcp        radacct         # Radius Accounting
radius-acct     1813/udp        radacct

a) 手动将 Raw 分解为 Radius

 rad = Radius(pkts[0]['Raw'].load)

b) 为 auto-dissection:

将 Radius 层绑定到 dst 端口 1813
 bind_layers(TCP, Radius, dport=1813)
 bind_layers(UDP, Radius, dport=1813)

这将导致:

>>> Radius(pkts[0][Raw].load).show()
###[ Radius ]###
  code= Accounting-Request
  id= 59
  len= 495
  authenticator= 'na\r\xa5\xb0w\x05\xbaU]t\x9a9k\x1c<'
###[ Raw ]###
     load= '\x01\x0fwzcna06629197\x05\x06\x01!e\x9f\x04\x06\xdd\x83\xe8\x0c\x08\x06\n\x9e\xfd\x9b\x0b\nnat-hsi1 \x1fZJWZH-MC-CMNET-BRAS12-CN_ME60(\x06\x00\x00\x00\x03)\x06\x00\x00\x00\x00*\x06$\x1d|o+\x06g\x88\xe3L,#ZJWZH-M01222175401439efd39c069285-\x06\x00\x00\x00\x01.\x06\x00\x03\xa0 /\x06\x00c\xbeC0\x06\x00\x9dq04\x06\x00\x00\x00\x005\x06\x00\x00\x00\x037\x06S\xbbGk=\x06\x00\x00\x00\x0f\x1f\x13c8:3a:35:4f:30:d8W4slot=1;subslot=2;port=22;vlanid=1439;vlanid2=1754;\x06\x06\x00\x00\x00\x02\x07\x06\x00\x00\x00\x013\x06\x00\x00\x00\x00\x1c\x06\x00\x00\x00\x00\x1b\x06\x00\t:\x80\x1a\xc1\x00\x00\x07\xdb<"10.158.253.155 c8:3a:35:4f:30:d8\x03\x06\x00@\x02\xb8\x02\x06\x00@\x02\xb8\x06\x06\x00@\x02\xb8\x05\x06\x00@\x02\xb8\x16\x06\x00\x00\x00\x0f\x1a\x06\x00\x01\x0e\xa5\x8a\x08nat444T\x06\x00\x00\x00\x00=\x06\x00\x00\x00\x0f>\x06\x00\x00\x00\x0f\x90\x06\x00\x00\x00\x00\x91\x06\x00\x00\x00\x00\x92\x06\x00\x00\x00\x00\x93\x06\x00\x00\x00\x00\x94\x06\x00\x00\x00\x00\x95\x06\x00\x00\x00\x00\x99\x13c8:3a:35:4f:30:d8\x9f\x06\x00\x00\x00\x00\x01\x06\x01@\x00\x00M\x06\x00_\xc2\x88\xa1\x06\xb7\xf5#]\xa2\x06\x00\x004\x00\xa3\x06\x00\x00C\xff'