python网络链接库

pyroute2的Python项目详细描述


Pyroute2是一个纯Pythonnetlink库它只需要Python stdlib, 没有第三方库。库作为rtnl协议启动 实现,因此名称是pyroute2,但现在它支持许多netlink 协议一些支持的netlink系列和协议:

  • rtnl,网络设置-地址、路由、流量控制
  • nfnetlink-netfilter API:ipsetnftables
  • ipq-最简单的用户空间数据包过滤,iptables队列目标
  • devlink-管理和监视启用devlink的硬件
  • generic-generic netlink系列
    • nl80211-无线功能API(基本支持)
    • taskstats-扩展进程统计信息
    • acpi_事件-acpi事件监视
    • 热事件-热事件监视
    • vfs_dquot-磁盘配额事件监视

从0.5.2开始,库还支持BSD系统上的pf_route套接字。

支持的系统

pyroute2在linux上本机运行,并模拟一些有限的子集 基于pf_路由通知的bsd系统上的rtnl netlink api 以及标准系统工具。

不支持其他平台。

最简单的用例

库提供的对象是具有 扩展API附加功能旨在:

  • 帮助打开/绑定NetLink套接字
  • 发现通用NetLink协议和多播组
  • 构造、编码和解码netlink和PF_路由消息

也许最简单的用例是监视事件。磁盘配额事件:

from pyroute2 import DQuotSocket
# DQuotSocket automatically performs discovery and binding,
# since it has no other functionality beside of the monitoring
with DQuotSocket() as ds:
    for message in ds.get():
        print(message)

使用IPRoute获取有关网络设置更改的通知:

from pyroute2 import IPRoute
with IPRoute() as ipr:
    # With IPRoute objects you have to call bind() manually
    ipr.bind()
    for message in ipr.get():
        print(message)

网络命名空间示例

网络命名空间操作:

from pyroute2 import netns
# create netns
netns.create('test')
# list
print(netns.listnetns())
# remove netns
netns.remove('test')

创建veth接口对并移动到netns

from pyroute2 import IPRoute

with IPRoute() as ipr:

    # create interface pair
    ipr.link('add',
             ifname='v0p0',
             kind='veth',
             peer='v0p1')

    # lookup the peer index
    idx = ipr.link_lookup(ifname='v0p1')[0]

    # move the peer to the 'test' netns:
    ipr.link('set',
             index='v0p1',
             net_ns_fd='test')

列出某些netns中的接口

from pyroute2 import NetNS
from pprint import pprint

ns = NetNS('test')
pprint(ns.get_links())
ns.close()

有关更多详细信息和示例,请参见文档中的。

安装

进行安装pip install pyroute2

要求

Python>;=2.7

Pyrout2测试框架要求: *薄片8 *覆盖范围 *鼻测试 *狮身人面像 *netaddr公司

测试的可选依赖项: *事件 *丝裂原 *瓶子 *团队(http://libteam.org/

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

推荐PyPI第三方库


热门话题
Java中的json IoT模块GET请求   在Java8中,如何使用lambda表达式中的条件?   Java 7中的io,如何通过一个实际示例演示文件之间的差异。存在和文件。不存在?   在Android Studio中使用Java从url获取JSON?   返回k个最小元素的java数组   java如何让我的安卓应用通过facebook登录并获得foursquare等好友列表   java如何在布局中以编程方式生成文本视图   在java中更改系统日期和时间的datetime代码段   java Hibernate和SQLite3,一对多关系映射   java Observable转换成kotlin问题   java在单独的线程中将VBO发送到GPU   属性文件中值的spring Java验证程序注释   java Spring启动:找不到javassist   java SimpleDataFormat时间解析   无法在linux上为Java程序正确设置PATH变量   将文件上载到FTP服务器时发生java异常   基于java TestNG的Selenium测试不能并行运行   java DAO类实例与DAO EJB   tomcat6部署*。使用Java Web Start(JNLP)的war应用程序