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如何使用从PreparedStatement返回的RowId。getGeneratedKeys()?   selenium chrome驱动程序中下一个网站url的java空白页   java如何将参数化匿名类转换为lambda?   java JUnit在AfterClass上获取测试结果   java将动态XML/JSON内容与静态标记化负载进行比较,并检索标记值   java共享一个需要数据持久性的项目[数据库]   java在调用方法时获取意外的参数类型。getParameterTypes()   java如何用jdbc在swing中用另一个字段替换外键?   需要java Jersey Tomcat CDI依赖项解释   java如何生成UML图   java如何编写Jersey rest服务可以通过给定的spring代码访问   SpringMaven存储库管理器Nexus与Java依赖项的Artifactory   java将包从另一个项目导入eclipse中的当前项目   加密Java使用密码加密文件