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
WiFiLinuxCoverageLatestDownloads
Build Status WiFiBuild StatusCoverage StatusLatest VersionDownloads

Quickstart

安装:

pip install libnl

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

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如果同一个线程可以在不同的CPU上调度,为什么它不会产生问题?   java在SWING框架中显示MySQL表   java更改元素的数据   arraylist根据java中的内部对象列表值从对象列表中删除元素   如何在Java中[flat]将多个数组合并到列表中   java错误:“id”列的类型为uuid,但表达式的类型为bytea   QName的java创建采用默认名称前缀,而不是提供的参数   java如何通过ASM捕获字节码中的运行时异常   java JDBC插入查询不在数据库中插入记录   安卓获取错误:无法反序列化对象。未能转换java类型的值。将字符串改为长字符串   java为Redis主/从配置Spring数据Redis和莴苣   java数据结构,用于以数据库表格式计算频率   java JPA:查询匹配不相关实体的许多属性   rmi使用java重新启动远程计算机   java无法加载库“libtesseract302”:找不到指定的模块   java Teradata和JDBC驱动程序classnotfoundexception。。。但是它在那里?   java Android端口转发