【Python】模拟radius coa报文
Radius协议中网关设备NAS是client,实现radius协议的服务为服务端(例如freeradius),这种情况下radius server并不能主动给NAS发送信息。在 rfc3576 Dynamic Authorization Extensions to RADIUS 中定义了一种radius的拓展,叫做
Change-of-Authorization (CoA)
,通过这个协议就可以从radius server主动给 radius client发起请求,例如用户下线,用户上网带宽动态修改等需求就可以通过COA来完成。
下面就是用pyrad来完成一种COA的请求发送,需求是通过python发送COA给网关,网关正确应答ACK。
注意: pypi中的pyrad最新版本并没有实现coa,你可以通过github自行安装 pyrad : http://github.com/andreynpetrov/pyrad.git
这个版本有这部分实现。
COA中定义的code
40 - Disconnect-Request [RFC2882] 下线请求
41 - Disconnect-ACK [RFC2882] 下线确认
42 - Disconnect-NAK [RFC2882] 下线不正常
43 - CoA-Request [RFC2882] coa请求
44 - CoA-ACK [RFC2882] coa确认
45 - CoA-NAK [RFC2882] coa不正常
Python模拟COA
这里的COA请求是网关设备厂商自定义的,用来完成用户认证,具体包结构定义只能参照rfc和厂家给的定义来实现,这里只记录下程序如何写的。调试中几个重要的点有: 网关厂商的字典,对于字典中厂商自定义字段的含义和值是否正确,防火墙是开启对应的白名单。 如果总是无法调通,请抓包对比,然后再测试。
#coding:utf-8
import socket, sys
import pyrad.packet
from pyrad.client import Client
from pyrad.dictionary import Dictionary
#NAS and Radius same 注意字典的加载
dict_dir = "./dictionary"
SECRET = "test"
NASIP = "172.16.15.188"
def send_coa_auth(uname, acl="auth_sla", qos="32M_Full"):
"""
send coa message to NAS, the attributes are
User-Name
Calling-Station-Id
Benu-ACL-Policy
Benu-QoS-Policy
"""
srv = Client(server=NASIP, secret=SECRET, dict=Dictionary(dict_dir))
req = srv.CreateCoAPacket(code=pyrad.packet.CoARequest, User_Name=uname)
req["Calling-Station-Id"] = uname
req["NAS-IP-Address"] = NASIP
req["Benu-ACL-Policy"] = acl # Benu开头为厂商定义字段
req["Benu-QoS-Policy"] = qos
try:
print "Sending COA request"
reply = srv.SendPacket(req)
except pyrad.client.Timeout:
print "DAS(NAS or Bas) does not reply"
return
except socket.error, error:
print "Network error: " + error[1]
return
if reply.code==pyrad.packet.CoAACK:
print "Coa accepted"
elif reply.code==pyrad.packet.CoANAK:
print "Coa nak"
else:
print reply.code
print "Attributes returned by NAS:"
for i in reply.keys():
print "%s: %s" % (i, reply[i][0])
if __name__ == "__main__":
send_coa_auth("F8-CF-C5-83-09-B9")
'''
# python coa_auth.py
import settings failure
Sending COA request
Coa accepted
Attributes returned by NAS:
Event-Timestamp: 1452219598
'''
参考
使用python发送COA报文动态改变RADIUS用户属性 此博主有很多相关的研究,表示感谢
【Python】模拟radius coa报文的更多相关文章
- 第14.7节 Python模拟浏览器访问实现http报文体压缩传输
一. 引言 在<第14.6节 Python模拟浏览器访问网页的实现代码>介绍了使用urllib包的request模块访问网页的方法.但上节特别说明http报文头Accept-Encodin ...
- Python模拟登陆新浪微博
上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...
- 【Python数据分析】Python模拟登录(一) requests.Session应用
最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...
- Python模拟C++输出流
看到一Python例子,挺有意思的,用Python模拟C++的输出流OStream.单纯只是玩. 原理: 利用Python __lshift__左移内建函数<<,调用时将输出内容,如果内容 ...
- 【py登陆】python模拟登录
用Python模拟登录网站 前面简单提到了 Python 模拟登录的程序,但是没写清楚,这里再补上一个带注释的 Python 模拟登录的示例程序.简单说一下流程:先用cookielib获取cookie ...
- 谈网页游戏外挂之用python模拟游戏(热血三国2)登陆
看web看多了,想写写页游的外挂,其实原理是一样的,就是端口不一样协议字段你不知道,而这也提高了点技术门槛,看我们来一点一点突破这些门槛,这次我们来用python发包模拟flash的客户端登陆. 以热 ...
- python 模拟浏览器
想用python模拟浏览器访问web的方法测试些东西,有哪几种方法呢? 一类:单纯的访问web,不解析其js,css等. 1. urllib2 #-*- coding:utf-8 -* import ...
- 【DataStructure In Python】Python模拟二叉树
使用Python模拟二叉树的基本操作,感觉写起来很别扭.最近做编译的优化,觉得拓扑排序这种东西比较强多.近期刷ACM,发现STL不会用实在太伤了.决定花点儿时间学习一下STL.Boost其实也很强大. ...
- 【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
随机推荐
- win 8.1 64位彻底删除王码98
安全模式 C:\Windows\SysWOW64\ 删除:winwb98.IME和winwb98.MB 注册表: 找到王码五笔相关的项.一般在最下面的以字母E开头的文件夹.全部删除. HKEY_LOC ...
- mvn管理项目jar包
Maven是一个采用纯Java编写的开 源项目管理工具.Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xm ...
- Java之equals和==详解
两者的区别: A:== 基本类型:比较的是值是否相同 引用类型:比较的是地址值是否相同 B:equals() 只能比较引用类型. 默认情况下,比较的是地址值是否相同,因为我们可以看源代码可以看到,在O ...
- bash与ksh数组使用
区别: bash与ksh在数组的使用中,最大的不同在于数组的定义. bash: declare -a arrayname ksh:set -A arrayname 其实,数组不用非要定义,在赋值的时候 ...
- JQuery之DOM操作及常用函数
属性操作 attr(name)获取属性值 var imgSrc = $("img").attr("src") attr(name,value)设置属性值 $(& ...
- The Ultimate Guide To iPhone Resolutions
备忘:http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutionshttp://appicontemplate.com/
- python在windows下使用setuptools安装egg文件
最近和同学做个东西,需要安装python的第三方函数库,看了网上的介绍,很是麻烦,这是我实践总结出来的,希望对大家有用. 以安装第三方库networkx 为例,其余函数库都是一个套路,看完就会滴. 1 ...
- Cocoa触发方法调用的几种方法
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 1.SEL触发 SEL就是selector的缩写,它表示Cocoa中的方法选择器,不明白?那请仔细了解Objecti ...
- iOS开发之六:常用控件--UIImageView的使用
UIImageView是我们做iOS开发用的非常多的一个控件,IOS中的各种图片,包括头像,有的背景图片等基本都要用到这个控件. 1.常用的属性以及方法 <span style="fo ...
- 高性能nosql ledisdb设计与实现 (2):replication
ledisdb现在已经支持replication机制,为ledisdb的高可用做出了保障. 使用 假设master的ip为10.20.187.100,端口6380,slave的ip为10.20.187 ...