两天来我一直在想这件事.我正在try 将数据包内容与regex API进行匹配:
packet_re = (r'.*RADIUS.*\s*Accounting(\s|-)Request.*(Framed(\s|-)IP(\s|-)Address.*Attribute.*Value: (?P<client_ip>\d+\.\d+\.\d+\.\d+))?.*(Username|User-Name)(\s|-)Attribute.*Value:\s*(?P<username>\S+).*')
packet1 = """
IP (tos 0x0, ttl 64, id 35592, offset 0, flags [DF], proto UDP (17), length 213)
10.10.10.1.41860 > 10.10.10.3.1813: [udp sum ok] RADIUS, length: 185
Accounting-Request (4), id: 0x0a, Authenticator: 41b3b548c4b7f65fe810544995620308
Framed-IP-Address Attribute (8), length: 6, Value: 10.10.10.11
0x0000: 0a0a 0a0b
User-Name Attribute (1), length: 14, Value: 005056969256
0x0000: 3030 3530 3536 3936 3932 3536
"""
result = search(packet_re, packet1, DOTALL)
正则表达式匹配,但未能捕获Framed-IP-Address Attribute
,client_ip=10.10.10.11
个.这件事是Framed-IP-Address Attribute
个可以或不能装在包裹里.因此,该模式包含在另一个捕获组中,以?
结尾,表示出现0次或1次.
当它没有到来的时候,我应该能够忽略它.因此,数据包内容也可以是:
packet2 = """
IP (tos 0x0, ttl 64, id 60162, offset 0, flags [DF], proto UDP (17), length 163)
20.20.20.1.54035 > 20.20.20.2.1813: [udp sum ok] RADIUS, length: 135
Accounting-Request (4), id: 0x01, Authenticator: 219b694bcff639221fa29940e8d2a4b2
User-Name Attribute (1), length: 14, Value: 005056962f54
0x0000: 3030 3530 3536 3936 3266 3534
"""
在这种情况下,正则表达式应该忽略帧IP地址.它确实忽略了,但当它到来时,它不会捕捉到.