千家信息网

pox 中 openflow.webservice 组建的学习与使用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Openflow的一个简单JSON-RPC-ish web service交互式接口,由of_service信息服务派生而来,依赖于webcore组件。可以使用HTTP POST方式发送JSON进行访
千家信息网最后更新 2026年11月02日pox 中 openflow.webservice 组建的学习与使用

Openflow的一个简单JSON-RPC-ish web service交互式接口,由of_service信息服务派生而来,依赖于webcore组件。可以使用HTTP POST方式发送JSON进行访问。

目前支持的方法有:


,

method介绍参数
get_flow_stats获取流表的表项dpid - 一个字符串形式的dpid,例如:'00-00-00-00-00-01'

flows -所有流表的列表

get_switch_desc获取指定交换机详细信息dpid - 同上
get_switches获取交换机列表和基本信息

dpid - 同上

match - 流表的匹配条目 (默认匹配所有)

table_id - 流表的id (默认是所有)

out_port - filter by out port (defaults to all)


set_table设置指定交换机的流表None.



在使用pox的过程中 基本只能在./pox.py 后面增加 组建一起运行,而webservice组建提供了一个可以通过web访问交换机和流表的接口,如上所示,只支持4个功能,我会在接下来的过程中进行演示~ 我基本是看的 pox wiki里面的资料然后进行验证 得出的结果,不过wiki中有一点bug,我也做了修正。大家也可以参考 pox wiki的内容~ 我用的是curl这个东东 执行上面的方法,这个东东的具体介绍这里就略过了~下面直接说我的运行过程把~

首先,这里用到两个基本的东东 mininet和pox,既然能看本文章的估计也不陌生,所以也不进行讲解,本文章指向写一些,国内网站中难以找到的一些东东。废话不多说~

首先运行 pox 和mininet(我基本都是su root 用root权限运行,比较个人使用,不用考虑什么安全问题),我们使用mininet默认的拓扑,比较只是功能的演示。


进入pox的目录 启动pox和相应的组建,为了验证测试获取信息我们开启了l3_learning组建,这个组建会在ping操作时下发流表:

cd pox                                 ./pox.py openflow.of_01 web.webcore openflow.webservice forwarding.l3_learning


开启mininet:

mn --controller=remote

一般默认的都会连上~并在pox中输出如下信息:

INFO:openflow.of_01:[00-00-00-00-00-01 2] connected


我们先在mininet中进行ping操作让控制器下发流表~

mininet> h2 ping h3

如果能ping通,交换机中就已经有控制器下发的流表了

现在我们就可以通过,curl访问web接口,获取信息了~

我们先获取交换机的流表

curl -i -X POST -d '{"method":"get_flow_stats","params":{"dpid":"00-00-00-00-00-01"},"id" : 1}' http://127.0.0.1:8000/OF/

这个操作分三个部分,前面的是curl命令,在此不讲,中间一对大括号中,就是我们要请求的数据,我们是以post的形式,请求数据的,最后就是我们要请求数据的网址,pox wiki中 写的网址是 http://127.0.0.1:8000 不过根据我自己的测试网站 应该是上面那个。下面我们来具体说下中间那对大括号里的内容;

一般我们发送表单都是一对一对数据的形式发送的,这种形式在python中称为字典,其他地方可能称为,哈希表,映射之类的东东~现在说说具体参数把,此方法中有三个参数,method,对应4个选项,已经在开头列出来了,params 对应的又是一个字典 ,里面包括一些对应方法的参数,比如例子中的方法,method,他就必须指定 我们所要获取的流表来自那个交换机,而交换机一般由dpid所标识,所以我们输入的参数就是 dpid,因为获取交换机的信息只是简单的操作 所以只有一个参数。在liux终端中执行上面那个命令 就可以获取控制器所连接的交换机的信息,本例子中的输出如下:

{"result": {"flowstats": [{"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "be:48:cb:78:60:92", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 2}], "duration_nsec": 194000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.2/32", "dl_src": "52:9d:f5:2b:88:d4", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 8, "dl_dst": "be:48:cb:78:60:92", "dl_vlan": 65535, "nw_src": "10.0.0.1", "in_port": 1}}, {"packet_count": 2, "hard_timeout": 0, "byte_count": 196, "duration_sec": 3, "actions": [{"dl_addr": "52:9d:f5:2b:88:d4", "type": "OFPAT_SET_DL_DST"}, {"max_len": 0, "type": "OFPAT_OUTPUT", "port": 1}], "duration_nsec": 193000000, "priority": 65535, "idle_timeout": 10, "cookie": 0, "table_id": 0, "match": {"dl_type": "IP", "nw_dst": "10.0.0.1/32", "dl_src": "be:48:cb:78:60:92", "nw_proto": 1, "nw_tos": 0, "tp_dst": 0, "tp_src": 0, "dl_dst": "52:9d:f5:2b:88:d4", "dl_vlan": 65535, "nw_src": "10.0.0.2", "in_port": 2}}], "dpid": "00-00-00-00-00-01"}, "id": 1}

如果没自己下发过流表,可能看起来有点艰难,但如果自己下发过流表,基本都能看懂。



获取指定交换机的信息(用 dpid指定不同的交换机):

curl -i -X POST -d '{"method":"get_switch_desc","params":{"dpid":"00-00-00-00-00-01"},"id" : 1}' http://127.0.0.1:8000/OF/

结果:

{"result": {"switchdesc": {"dp_desc": "None", "sw_desc": "2.3.2", "hw_desc": "Open vSwitch", "serial_num": "None", "mfr_desc": "Nicira, Inc."}, "dpid": "00-00-00-00-00-01"}, "id": 1}

其实什么内容都木有。。。咳咳。。

获取交换机列表和基本信息:

curl -i -X POST -d '{"method":"get_switches","id" : 1}'

结果:

{"result": [{"n_tables": 254, "ports": [{"hw_addr": "9e:0f:91:2d:a0:8e", "name": "s1-eth2", "port_no": 1}, {"hw_addr": "de:d6:d4:55:9e:e0", "name": "s1-eth3", "port_no": 2}, {"hw_addr": "7a:2a:44:cf:ff:4f", "port_down": true, "link_down": true, "name": "s1", "port_no": 65534}], "dpid": "00-00-00-00-00-01"}], "id": 1}

因为只有一个交换机,所以就获得了一组信息~

最后就是下发流表了~

curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }}]}}' http://127.0.0.1:8000/OF/

params 里面除了指定了dpid 还多了一个flow,在python中中括号里面的是列表的形式,也就是可以同时下发好几条流表,同理 actions对应的也是列表的形式,对应多个动作。flows里面就是一条一条的流表了,我们指定了流表的匹配那些信息,首先它得是一个ip数据包,然后必须是从1号端口进来的数据包,我们还指定了它匹配成功后的动作是从2号端口转发~

我们再演示下如何同时下发多条流表:

curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","in_port":1 }},{"actions":[{"type":"OFPAT_OUTPUT","port":"OFPP_ALL"}]}]}}' http://127.0.0.1:8000/OF/

我们在flows列表中 又加入了一条~

然后我们在mininet中查看流表,执行以下代码:

mininet> dpctl dump-flows

我们就可以获取以下信息:

*** s1 ------------------------------------------------------------------------NXST_FLOW reply (xid=0x4): cookie=0x0, duration=203.063s, table=0, n_packets=0, n_bytes=0, idle_age=203, actions=ALL cookie=0x0, duration=203.102s, table=0, n_packets=0, n_bytes=0, idle_age=203, ip,in_port=1 actions=output:2

到此 所有的内容就结束了,有可能讲的不够明白,也有可能讲的太罗嗦,又不懂地方,大家可以留言,或者给我发邮件~ 当然,留言 的话我是不知道几个世纪才会 上一次博客,所以最好是 发邮件~


最后还有一个问题,当我match 源ip地址的时候老是出现问题

curl -i -X POST -d '{"method":"set_table","params":{"dpid":"00-00-00-00-00-01","flows":[{"actions": [{"type":"OFPAT_OUTPUT","port":2}],"match": {"dl_type": "IP","nw_dst":"192.168.42.0/255.255.255.0" }}]}}' http://127.0.0.1:8000/OF/

如果我这样下发 就会出现问题,目前无解。。。别人说他在ovs2.5的版本 和 POX eel 中运行没有错误。。。

交换机 信息 参数 形式 数据 就是 运行 内容 方法 问题 括号 接口 控制器 结果 过程 控制 演示 三个 例子 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 广州为想互联网科技有限公司 与互联网科技公司 互联网与新科技 中国互联网科技发展 互联网科技的未来发展 天扬科技互联网广告 辽宁互联网新科技 中国科技创新与世界互联网大会 互联网公司黑科技创始人 广州新华互联网科技学校电竞方面 互联网数据科技专业 上海京穆互联网科技有限公司 沐思想互联网科技有限公司 智帮互联网科技公司最近动向 普陀区互联网教育科技管理办法 互联网时代高科技布局 唐山双旺合互联网科技产业园 亚光科技低轨卫星互联网 平安好医生打造互联网科技医疗 互联网品科技 互联网科技公司发展 互联网科技股午盘股票涨跌 上海电发互联网科技有限公司 随着互联网科技发展 江阴互联网智能科技产品进口 坤平互联网科技 阿里互联网科技企业 数字科技和互联网金融哪个好 黑龙江互联网科技公司
0