netlink协议库套件的纯python端口。
libnl的Python项目详细描述
libnl的一个端口,一个向netlink提供api的库集合 基于协议的linux内核接口。这个库相当于原始c库的api,应该使它 相对容易地将c程序转换成纯python,而不必调用外部二进制文件。
由于netlink是一个特定于linux的协议,这个库只能在linux主机上工作。所有的交流都是用 python进程和linux内核之间的套接字。移植libnl的主要驱动程序是 nl80211在python中扫描无线访问 以本机方式指向,而不必运行外部程序并分析其输出。
- Linux上支持的Python2.6、2.7、PyPy、PyPy3、3.3和3.4
WiFi | Linux | Coverage | Latest | Downloads |
---|---|---|---|---|
Example Implementations
一个简单的python程序,它只列出主机上的网络适配器:
importctypesimportsocketfromlibnl.errorimporterrmsgfromlibnl.handlersimportNL_CB_CUSTOM,NL_CB_VALID,NL_OKfromlibnl.linux_private.if_linkimportIFLA_IFNAME,IFLA_RTAfromlibnl.linux_private.netlinkimportNETLINK_ROUTE,NLMSG_LENGTH,NLM_F_DUMP,NLM_F_REQUESTfromlibnl.linux_private.rtnetlinkimportRTA_DATA,RTA_NEXT,RTA_OK,RTM_GETLINK,ifinfomsg,rtgenmsgfromlibnl.miscimportget_stringfromlibnl.msgimportnlmsg_data,nlmsg_hdrfromlibnl.nlimportnl_connect,nl_recvmsgs_default,nl_send_simplefromlibnl.socket_importnl_socket_alloc,nl_socket_modify_cbdefcallback(msg,_):nlh=nlmsg_hdr(msg)iface=ifinfomsg(nlmsg_data(nlh))hdr=IFLA_RTA(iface)remaining=ctypes.c_int(nlh.nlmsg_len-NLMSG_LENGTH(iface.SIZEOF))whileRTA_OK(hdr,remaining):ifhdr.rta_type==IFLA_IFNAME:print('Found interface {0}: {1}'.format(iface.ifi_index,get_string(RTA_DATA(hdr)).decode('ascii')))hdr=RTA_NEXT(hdr,remaining)returnNL_OKsk=nl_socket_alloc()# Creates an nl_sock instance.ret=nl_connect(sk,NETLINK_ROUTE)# Create file descriptor and bind socket.ifret<0:raiseRuntimeError('nl_connect() returned {0} ({1})'.format(ret,errmsg[abs(ret)]))rt_hdr=rtgenmsg(rtgen_family=socket.AF_PACKET)ret=nl_send_simple(sk,RTM_GETLINK,NLM_F_REQUEST|NLM_F_DUMP,rt_hdr,rt_hdr.SIZEOF)ifret<0:raiseRuntimeError('nl_send_simple() returned {0} ({1})'.format(ret,errmsg[abs(ret)]))nl_socket_modify_cb(sk,NL_CB_VALID,NL_CB_CUSTOM,callback,None)# Add callback to the nl_sock instance.ret=nl_recvmsgs_default(sk)# Get kernel's answer, and call attached callbacks.ifret<0:raiseRuntimeError('nl_recvmsgs_default() returned {0} ({1})'.format(ret,errmsg[abs(ret)]))
下面是更多的示例,它们的c等价物按从“easy”到“hard”的顺序排列:
Changelog
这个项目遵循Semantic Versioning。
0.2.0 - 2015-03-26
- 已添加
- python2.6、pypy和pypy3支持。
0.1.1 - 2015-03-15
- 初次发布。