Skip to content

Commit 28d238c

Browse files
committed
[FIXED] handle Packet Error
1 parent 55576a5 commit 28d238c

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

docker-compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ x-logging: &default-logging-settings
77
driver: "json-file"
88
options:
99
max-size: "10m"
10+
max-file: "1"
1011
tag: "radius_server.{{.Name}}.{{.ID}}"
1112

1213
no_tag_logging: &no_tag_logging
1314
driver: "json-file"
1415
options:
1516
max-size: "10m"
17+
max-file: "1"
1618

1719

1820
services:

src/child_pyrad/request.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ def __init__(self, secret, dict: Dictionary, packet: bytes, socket, address):
2727
# access-request 需要 Message-Authenticator 字段验证报文合法性; 报文头Authenticator字段是随机生成的
2828
# log.warning(f'VerifyAuthRequest failed from address: {address}, authenticator: {self.authenticator}')
2929
assert self.authenticator != b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
30+
self.username = self['User-Name'][0]
31+
self.nas_ip = self['NAS-IP-Address'][0] # 如果获取自报文字段 self['NAS-IP-Address'][0], 会出现ip更新不及时, 与真实IP不一致的问题
3032
except Exception as e:
3133
raise PacketError(str(e))
32-
self.socket, self.address = socket, address
34+
3335
# 报文提取
34-
# self['Service-Type'][0] 和 self['Service-Type'][1] 分别对应字典 dictionary.pyrad 里面 VALUE Service-Type Call-Check 10 的第1个和第2个值
35-
self.username = self['User-Name'][0]
36-
self.nas_ip = self['NAS-IP-Address'][0] # 如果获取自报文字段 self['NAS-IP-Address'][0], 会出现ip更新不及时, 与真实IP不一致的问题
36+
# self['Service-Type'][0] 和 self['Service-Type'][1] 对应字典 VALUE Service-Type Call-Check 10 中的字符串 Call-Check 和值 10
3737
# optional:
3838
default_string = ('', 0)
3939
self.user_mac = self.get('Calling-Station-Id', default_string)[0]
@@ -47,6 +47,7 @@ def __init__(self, secret, dict: Dictionary, packet: bytes, socket, address):
4747
self.ap_mac, self.ssid = self.ap_mac.split(':', 1)
4848

4949
self.auth_protocol = 'UNKNOWN-AUTH'
50+
self.socket, self.address = socket, address
5051

5152
def get_service_type(self) -> str:
5253
return self['Service-Type'][0] # 2: Framed; 10: Call-Check; https://datatracker.ietf.org/doc/html/rfc2865#page-31
@@ -109,13 +110,13 @@ def __init__(self, secret, dict, packet: bytes, socket, address):
109110
init_packet_from_receive(super(), code=self.code, id=0, secret=secret, authenticator=None, dict=dict, packet=packet)
110111
# account-request 可使用 Authenticator 字段验证报文合法性
111112
assert self.VerifyAcctRequest()
113+
self.username = self['User-Name'][0]
114+
self.nas_ip = self['NAS-IP-Address'][0] # 如果获取自报文字段 self['NAS-IP-Address'][0], 会出现ip更新不及时, 与真实IP不一致的问题
115+
self.iut = self['Acct-Status-Type'][0] # I,U,T包. Start-1; Stop-2; Alive-3; Accounting-On-7; Accounting-Off-8;
112116
except Exception as e:
113117
raise PacketError(str(e))
114-
self.socket, self.address = socket, address
118+
115119
# 报文提取
116-
self.username = self['User-Name'][0]
117-
self.nas_ip = self['NAS-IP-Address'][0] # 如果获取自报文字段 self['NAS-IP-Address'][0], 会出现ip更新不及时, 与真实IP不一致的问题
118-
self.iut = self['Acct-Status-Type'][0] # I,U,T包. Start-1; Stop-2; Alive-3; Accounting-On-7; Accounting-Off-8;
119120
# https://www.h3c.com/cn/Service/Document_Software/Document_Center/Home/Wlan/00-Public/Configure/Radius_Attribute_List/H3C_RADIUS_V7-19485/
120121
default_string = (0, 0)
121122
self.session_time = self.get('Acct-Session-Time', default_string)[0] # 秒
@@ -129,6 +130,7 @@ def __init__(self, secret, dict, packet: bytes, socket, address):
129130
self.user_mac = self.get('Calling-Station-Id', default_string)[0]
130131
self.auth_class = self.get('Class', default_string)[0]
131132
self.nas_name = self.get('NAS-Identifier', default_string)[0]
133+
self.socket, self.address = socket, address
132134

133135
def reply_to(self, reply: AcctPacket):
134136
log.trace(f'reply: {reply}')

0 commit comments

Comments
 (0)