Skip to content

Commit 2eb4e5f

Browse files
committed
🐛 修复拒绝认证函数
1 parent a497048 commit 2eb4e5f

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pppoe-intercept.build/
2+
pppoe-intercept.dist/

pppoe-intercept.py

+19-15
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,18 @@ def filterData(self, pkt):
4747
0x8863: {
4848
"code": {
4949
#PADI
50-
0x09: (self.send_pado_packet, "PADI阶段开始,发送PADO..."),
50+
0x09: self.send_pado_packet,
5151
#PADR
52-
0x19: (self.send_pads_packet, "PADR阶段开始,发送PADS...")
52+
0x19: self.send_pads_packet
5353
}
5454
},
5555
#会话阶段
5656
0x8864:{
5757
"proto":{
5858
#LCP链路处理
59-
0xc021:(self.send_lcp,"----------会话阶段----------"),
59+
0xc021: self.send_lcp,
6060
#PAP协议处理
61-
0xc023:(self.get_papinfo,"获取账号信息...")
61+
0xc023: self.get_papinfo
6262
}
6363
}
6464
}
@@ -67,15 +67,15 @@ def filterData(self, pkt):
6767
for k, v in _nMethod.items():
6868
_nVal = getattr(pkt, k)
6969
if _nVal in _nMethod[k]:
70-
_nObj = _nMethod[k][_nVal]
71-
print(_nObj[1])
72-
_nObj[0](pkt)
70+
handle_func = _nMethod[k][_nVal]
71+
handle_func(pkt)
7372

7473

7574
#处理 PPP LCP 请求
7675
def send_lcp(self, pkt):
7776
# 初始化 clientMap
7877
if not self.clientMap.get(pkt.src):
78+
print("----------会话阶段----------")
7979
self.clientMap[pkt.src] = {"req": 0, "ack": 0}
8080

8181
# 处理 LCP-Configuration-Req 请求
@@ -102,7 +102,7 @@ def send_lcp(self, pkt):
102102
# 处理 LCP-Configuration-Ack 请求
103103
elif bytes(pkt.payload)[8] == 0x02:
104104
self.clientMap[pkt.src]['ack'] += 1
105-
print("第 %d 收到LCP-Config-Ack" % self.clientMap[pkt.src]["ack"])
105+
print("第 %d 次收到LCP-Config-Ack" % self.clientMap[pkt.src]["ack"])
106106
else:
107107
pass
108108

@@ -111,12 +111,14 @@ def get_papinfo(self, pkt):
111111
# pap-req
112112
_payLoad = bytes(pkt.payload)
113113
if _payLoad[8] == 0x01:
114+
print("获取账号信息...")
114115
_nUserLen = int(_payLoad[12])
115116
_nPassLen = int(_payLoad[13 + _nUserLen])
116117
_userName = _payLoad[13:13 + _nUserLen]
117118
_passWord = _payLoad[14 + _nUserLen:14 + _nUserLen + _nPassLen]
118-
print("get User:%s,Pass:%s" % (_userName, _passWord))
119-
#self.send_pap_authreject(pkt)
119+
print("账户: %s\n密码: %s" % (_userName.decode('utf-8'), _passWord.decode('utf-8')))
120+
self.send_pap_authreject(pkt)
121+
self.send_lcp_end_packet(pkt)
120122
if pkt.src in self.clientMap:
121123
del self.clientMap[pkt.src]
122124

@@ -125,9 +127,9 @@ def get_papinfo(self, pkt):
125127

126128
# 发送pap拒绝验证
127129
def send_pap_authreject(self, pkt):
128-
pkt.dst, pkt.src = pkt.src, pkt.dst
129-
pkt.payload = b'\x03\x02\x00\x06\x01\x00'
130-
scapy.sendp(pkt)
130+
_payload = b'\x03' + bytes(pkt.payload)[9:10] + b'\x00\x06\x01\x00'
131+
_pkt = Ether(src=pkt.dst, dst=pkt.src, type=0x8864) / PPPoED(version=1, type=1, code=0x00, sessionid=SESSION_ID) / PPP(proto=0xc023) / _payload
132+
scapy.sendp(_pkt)
131133

132134
# 发送lcp-config-ack回执包
133135
def send_lcp_ack_packet(self, pkt):
@@ -211,18 +213,19 @@ def send_lcp_req_packet(self, pkt):
211213

212214
# 发送 lcp-echo-req包
213215
def send_lcp_echo_request(self, pkt):
214-
215216
_payload = b'\x09\x00\x00\x08' + b'\x25\x5f\xc5\xcb'
216217
lcp_req = Ether(src=pkt.dst, dst=pkt.src, type=0x8864) / PPPoED(version=1, type=1, code=0x00, sessionid=SESSION_ID) / PPP(proto=0xc021) / _payload
217218
scapy.sendp(lcp_req)
218219

219220
#发送lcp-termination会话终止包
220221
def send_lcp_end_packet(self, pkt):
221-
_pkt = Ether(src=pkt.dst, dst=pkt.src, type=0x8863) / PPPoE(version=0x1, type=0x1, code=0xA7, sessionid=0x01, len=0)
222+
_payload = b'\x05\x02\x00\x04'
223+
_pkt = Ether(src=pkt.dst, dst=pkt.src, type=0x8864) / PPPoE(version=0x1, type=0x1, code=0x00, sessionid=SESSION_ID) / PPP(proto=0xc021) / _payload
222224
scapy.sendp(_pkt)
223225

224226
#发送PADS回执包
225227
def send_pads_packet(self, pkt):
228+
print("PADR阶段开始,发送PADS...")
226229
#寻找客户端的Host_Uniq
227230
_host_Uniq = self.padi_find_hostuniq(pkt.payload)
228231
_payload = b'\x01\x01\x00\x00'
@@ -236,6 +239,7 @@ def send_pads_packet(self, pkt):
236239

237240
#发送PADO回执包
238241
def send_pado_packet(self, pkt):
242+
print("PADI阶段开始,发送PADO...")
239243
# 寻找客户端的Host_Uniq
240244
_host_Uniq = self.padi_find_hostuniq(pkt.payload)
241245
_payload = b'\x01\x02\x00\x07akkuman\x01\x01\x00\x00'

0 commit comments

Comments
 (0)