SDN-Mininet命令详解(py dpctl ovs-vsctl ovs-ofctl)_关闭ovs

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以点击这里获取

|将路由添加到主机。
| ip:IP地址,点分十进制
| intf:字符串,接口名称
|
| setIP(self,ip,prefixLen = 8,intf = None,** kwargs)
|设置接口的IP地址。
| intf:intf或接口名称
| ip:IP地址作为字符串
| prefixLen:前缀长度,例如8个/ 8或16M加法器
| kwargs:intf.setIP的所有其他参数
|
| setMAC(self,mac,intf =None)
|设置接口的MAC地址。
| intf:intf或intf名称
| mac:MAC地址为字符串
|
| setParam(self,results,method,** param)
|内部方法:配置一个单一的参数
|results:要更新的结果字典
|method:配置方法名称
|param:arg = value(如果value = None则忽略)
|值也可以是列表或字典
|
| startShell(self,mnopts = None)
|启动Shell进程以运行命令
|
|terminate(self)
|向节点发送终止信号并对其进行清理。
|
| unmountPrivateDirs(个体)
|挂载私有目录
|
| waitOutput(self,verbose = False,findPid = True)
|等待命令完成。
|完成由前哨字符ASCII(127)表示
|出现在输出流中。等待哨兵返回输出,包括尾随换行符。
|详细:以交互方式打印输出
|
| waitReadable(self,timeoutms = None)
|等待直到节点的输出可读。
| timeoutms:超时(以毫秒为单位)或填写“None”进行无限期等待。
|返回:poll()的结果
|
|write(self,data)
|将数据写入节点。
|data:字符串
|
| -------------------------------------------------- --------------------
|从Node继承的类方法:
|
|checkSetup(cls) __builtin __.type中的
|确保设置了我们的类和超类
|
|fdToNode(cls,fd)__builtin __.type中的
|返回节点对应于给定的文件描述符。
| fd:文件描述符
|返回:节点
|
|setup(cls) __builtin __.type中的
|确保我们的类依赖项可用
|
| -------------------------------------------------- --------------------
|从Node继承的数据描述符:
|
| dict
|实例变量字典(如果已定义)
|
| weakref
|对对象的弱引用列表(如果已定义)
|
| -------------------------------------------------- --------------------
|从mininet.node.Node继承的数据和其他属性:
|
| inToNode = {7:<RemoteController c0:127.0.0.1:6633 pid = 74955>,9:<c …
|
| outToNode = {7:<RemoteController c0:127.0.0.1:6633 pid = 74955>,9:<…


### 示例


**从controller继承的方法**


* **IP**




![](https://img-blog.csdnimg.cn/2020032411015798.PNG)

 显示c0的ip 
 


**从Node继承的类方法**


* **\_\_str\_\_**




![](https://img-blog.csdnimg.cn/20200324111020634.PNG)

 显示控制器名称 
 


* **cmdPrint**




![](https://img-blog.csdnimg.cn/20200324111258790.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70)

 运行cmdf命令ifconfig并打印结果 
 


博主测试了其他cmd命令,也可以运行。


### 交换机相关


使用py help(s1)可查看交换机命令界面,使用dir()可查看命令,不包含命令的作用及参数解释,使用方法见下图。




![](https://img-blog.csdnimg.cn/20200324104538746.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70)

 控制器,交换机,主机命令目录 
 


 可以看出,有些函数名称是一样的,部分函数名称、作用及参数一样,不再翻译,主机的翻译也是。



class customOvs(mininet.node.OVSSwitch)
|自定义的OVS交换机
|
|方法解析顺序:
| customOvs
| mininet.node.OVSSwitch
| mininet.node.Switch
| mininet.node.Node
| builtin.object
|
|此处定义的方法:
|
| __init __(self,name,failMode =‘secure’,datapath =‘kernel’,** params)
|
| getSwitchIP()
|返回IP地址
|
| setSwitchIP(self,ip)
|设置管理IP地址
|
|start(self,controllers)
|启动并设置管理IP地址
|
| -------------------------------------------------- --------------------
|此处定义的数据和其他属性:
|
| OVSVersion =‘2.9’
|
| isSetup = True
|
| -------------------------------------------------- --------------------
|从mininet.node.OVSSwitch继承的方法:
|
|attach(self,intf)
|连接数据端口
|
| bridgeOpts(self)
|返回OVS桥选项
|
|connected(self)
|我们是否连接到至少一个控制器?
|
| controllerUUIDs(self,update = False)
|返回控制器的ovsdb UUID
|update:更新缓存的值
|
| detach(self,intf)
|断开数据端口
|
| dpctl(self,* args)
|运行ovs-ofctl命令
|
| intfOpts(self,intf)
|返回intf的OVS接口选项
|
|stop(self,deleteIntfs = True)
|终止OVS交换机
|deleteIntfs:删除接口? (真)
|
|vsctl(self,* args,** kwargs)
|运行ovs-vsctl命令(或排队等待以后执行)
|
| -------------------------------------------------- --------------------
|从mininet.node.OVSSwitch继承的类方法:
|
|batchShutdown(cls,switches,run = ),来自__builtin __.type
|关闭OVS开关列表
|
|batchStartup(cls,switches,run = ),来自__builtin __.type
|批量启动OVS
|switches:交换机启动
| run:运行命令的函数(errRun)
|
| isOldOVS(cls),来自__builtin __.type
| OVS误差是否小于1.10?
|
|
| setup(cls),来自__builtin __.type
|确保已安装Open vSwitch并正常工作
|
| -------------------------------------------------- --------------------
|从mininet.node.OVSSwitch继承的静态方法:
|
| TCReapply(intf)
|不幸的是,OVS和Mininet正在战斗在tc排队学科上。
|作为快速技巧/解决方法,我们清除了OVS,然后重新应用我们自己的。
|
| -------------------------------------------------- --------------------
|从mininet.node.OVSSwitch继承的数据和其他属性:
|
| argmax = 128000
|
| -------------------------------------------------- --------------------
|从mininet.node.Switch继承的方法:
|
| __repr __(self)
|更丰富的字符串表示形式
|
| defaultDpid(self,dpid = None)
|从dpid或开关名称返回正确格式的dpid(s1-> 1)
|
| defaultIntf()
|返回控制界面
|
| sendCmd(self,* cmd,** kwargs)
|发送命令到节点
| cmd:字符串
|
| -------------------------------------------------- --------------------
|从mininet.node.Switch继承的数据和其他属性:
|
| dpidLen = 16
|
| portBase = 1


### 示例


**从mininet.node.OVSSwitch继承的方法**


* **attach**




![](https://img-blog.csdnimg.cn/20200324113723263.PNG)

 交换机s2添加端口s2-eth3 
 


* **bridgeOpts**




![](https://img-blog.csdnimg.cn/2020032411394227.PNG)

 返回桥选项 
 


* **connected**




![](https://img-blog.csdnimg.cn/20200324114128857.PNG)

 是否连接控制器 
 


      True表示已连接,False表示未连接


* **controllerUUIDs**




![](https://img-blog.csdnimg.cn/2020032411432076.PNG)

 返回控制器的UUID 
 


* **stop**




![](https://img-blog.csdnimg.cn/20200324122252129.PNG)

 关闭交换机 
 


dpctl ovs-vsctl ovs-ofctl等放在后面讲解


### 主机相关命令


使用py help(h1)可查看主机命令界面


翻译如下



class Host(Node)
|主机只是一个节点
|
|方法解析顺序:
|Host
|Node
| buliltin.object
|
|此处定义的数据和其他属性:
|
| isSetup = True
|
| -------------------------------------------------- --------------------
|从Node继承的方法:
|
| IP(self,intf=None)
|返回节点或特定接口的IP地址。
|
| MAC(self,intf=None)
|返回节点或特定接口的MAC地址。
|
| __init __(self,name,inNamespace = True,** params)
| name:节点名称
| inNamespace:在网络名称空间?
| privateDirs:私有目录字符串或元组的列表
| params:节点参数(有关详细信息,请参见config())
|
| __repr __(self)
|更丰富的字符串表示形式
|
| __str __(self)
|缩写字符串表示
|
| addIntf(self,intf,port = None,moveIntfFn = <函数moveIntf>)
|添加接口
| intf:接口
| port:端口号(可选,通常为OpenFlow端口号)
| moveIntfFn:移动界面的功能(可选)
|
|cleanup(​​self)
|帮助python收集其垃圾。
|
| cmd(self,* args,** kwargs)
|发送命令,等待输出,然后返回
| cmd:字符串
|
| cmdPrint(self,* args)
|调用cmd并打印其输出
| cmd:字符串
|
| config(self,mac = None,ip = None,defaultRoute = None,lo =‘up’,** _ params)
|根据(可选)参数配置节点:
| mac:默认接口的MAC地址
| ip:默认接口的IP地址
| ifconfig:任意接口配置子类应重写此方法并调用父类的config(** params)
|
| configDefault(self,** moreParams)
|使用默认参数进行配置
|
| connectionsTo(self,节点)
|对于将自身连接到节点的所有接口,返回[接口1,接口2 …]
|
| defaultIntf()
|最低端口的返回接口
|
| delIntf(self,intf)
|从Node的已知接口中删除接口
|注意:要完全删除接口,请调用intf.delete()
|
| deleteIntfs(self,checkName = True)
|删除所有接口
| checkName:仅删除包含我们名称的接口
|
| intf(self,intf = None)
|返回给定字符串名称的接口对象,
|如果名称为假(None,空字符串等),则默认为intf。
|或输入intf参数。
|
|使此函数返回其接口对象的参数使其使用灵活的输入参数更容易构造函数
|接口(既接受字符串名称又接受Intf对象的接口)。
|
| intfIsUp(self,intf = None)
|检查接口是否打开
|
| intfList(self)
|我们的接口列表按端口号排序
|
| intfNames(self)
|我们的接口名称按端口号排序
|
| linkTo(自身,节点,链接= <类’mininet.link.Link’>)
| (不建议使用)链接到另一个节点
|替换为Link(node1,node2)
|
|monitor(self,timeoutms=None,findPid = True)
|监视并返回命令的输出。
|如果命令已完成,请将self.waiting设置为False。
| timeoutms:超时(以毫秒为单位)或填写“None”进行无限期等待
| findPid:用mnexec -p查找PID
|
| mountPrivateDirs(self)
|挂载私有目录
|
| newPort(self)
|返回下一个要分配的端口号。
|
| pexec(self,* args,** kwargs)
|使用popen执行命令
|返回:out,err,exitcode
|
| popen(self,* args,** kwargs)
|在我们的命名空间中返回一个Popen()对象
| args:Popen()args,单个列表或字符串
| kwargs:Popen()关键字args
|
|read(self,size= 1024)
|从节点缓冲读取,可能会阻塞。
| size:要返回的最大字符数
|
| readline(self)
|来自节点的缓冲读取行,可能会阻塞。
|返回:行(减去换行符)或None
|
| sendCmd(self,* args,** kwargs)
|发送命令,然后发送命令回显哨兵,
|然后返回,而None需等待命令完成。
| args:命令和参数,或字符串
| printPid:打印命令的PID? (假)
|
| sendInt(self,intr =‘\ x03’)
|中断运行命令。
|
| setARP(self,ip,mac)
|添加ARP条目。
| ip:IP地址作为字符串
| mac:MAC地址为字符串
|
| setDefaultRoute(self,intf = None)
|设置默认路由以通过intf。
| intf:Intf或{dev 通过 …}
|
| setHostRoute(self,ip,intf)
|将路由添加到主机。
| ip:IP地址,点分十进制
| intf:字符串,接口名称
|
| setIP(self,ip,prefixLen = 8,intf = None,** kwargs)
|设置接口的IP地址。
| intf:intf或接口名称
| ip:IP地址作为字符串
| prefixLen:前缀长度,例如8个/ 8或16M加法器
| kwargs:intf.setIP的所有其他参数
|
| setMAC(self,mac,intf =None)
|设置接口的MAC地址。
| intf:intf或intf名称
| mac:MAC地址为字符串
|
| setParam(self,results,method,** param)
|内部方法:配置一个单一的参数
|results:要更新的结果字典
|method:配置方法名称
|param:arg = value(如果value = None则忽略)
|值也可以是列表或字典
|
| startShell(self,mnopts = None)
|启动Shell进程以运行命令
|
|terminate(self)
|向节点发送终止信号并对其进行清理。
|
| unmountPrivateDirs(个体)
|挂载私有目录
|
| waitOutput(self,verbose = False,findPid = True)
|等待命令完成。
|完成由前哨字符ASCII(127)表示
|出现在输出流中。等待哨兵返回输出,包括尾随换行符。
|详细:以交互方式打印输出
|
| waitReadable(self,timeoutms = None)
|等待直到节点的输出可读。
| timeoutms:超时(以毫秒为单位)或填写“None”进行无限期等待。
|返回:poll()的结果
|
|write(self,data)
|将数据写入节点。
|data:字符串


### 示例


**从Node继承的方法**


* **IP**
* **MAC**




![](https://img-blog.csdnimg.cn/2020032412364730.PNG)

 显示IP、MAC 
 


 


## dpctl命令


### 常用选项


* dump-flows   SWITCH FLOW          print matching FLOWs(打印流表)
* show              SWITCH                    show OpenFlow information(显示SWITCH的OpenFlow信息)
* dump-tables   SWITCH                    print table stats(打印表统计信息)
* dump-ports     SWITCH [PORT]       print port statistics(打印端口统计信息)
* add-flow         SWITCH FLOW         add flow described by FLOW(通过流的描述来添加流)
* del-flows         SWITCH [FLOW]       delete matching FLOWs(删除匹配的FLOW,后面加条件,比如in\_port=1)
* -V,--version                                    display version information(显示交换机版本信息)
* -O, --protocols                               set allowed OpenFlow version(default: OpenFlow10, OpenFlow11, OpenFlow12, OpenFlow13, OpenFlow14)(设置允许的OpenFlow版本,后面是默认值)


### 示例


#### show


显示交换机的动作列表,缓存大小等信息




![](https://img-blog.csdnimg.cn/2020031618493111.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70)

 显示交换机信息 
 


#### -V --version


显示交换机的版本信息




![](https://img-blog.csdnimg.cn/20200316184723818.PNG)

 显示交换机版本信息 
 


其余部分命令,在[SDN-流表分析与增删改查](https://bbs.csdn.net/topics/618540462)中有具体的使用情况。


##  ovs-vsctl命令




![](https://img-blog.csdnimg.cn/2020031618555988.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70)

 ovs-vsctl的帮助信息 
 


### 常用选项


* show                                  print overview of database contents(显示数据库内容的打印概述,查看网桥)
* add-br  BRIDGE                create a new bridge named BRIDGE(创建一个名为BRIDGE的新网桥)
* del-br BRIDGE                  delete BRIDGE and all of its ports(删除BRIDGE及其所有端口)
* add-port BRIDGE PORT   add network device PORT to BRIDGE(将网络设备PORT添加到BRIDGE)
* del-port [BRIDGE] PORT  delete PORT (which may be bonded) from BRIDGE 从BRIDGE删除PORT(可能是绑定的)
* del-controller BRIDGE       delete the controllers for BRIDGE(删除BRIDGE的控制器)


####  示例


占个坑


## ovs-ofctl命令




![](https://img-blog.csdnimg.cn/2020031620024396.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70)

 ovs-ofctl命令帮助 
 


和dpctl显示的是一样的


### 常用选项


* dump-flows   SWITCH FLOW          print matching FLOWs(打印流表,后面需要添加参数,即交换机名)
* show              SWITCH                    show OpenFlow information(显示SWITCH的OpenFlow信息)
* dump-tables   SWITCH                    print table stats(打印表统计信息)
* dump-ports     SWITCH [PORT]       print port statistics(打印端口统计信息)
* add-flow         SWITCH FLOW         add flow described by FLOW(通过流的描述来添加流)
* del-flows         SWITCH [FLOW]       delete matching FLOWs(删除匹配的FLOW,后面加条件,比如in\_port=1)
* -V,--version                                    display version information(显示交换机版本信息)
* -O, --protocols                               set allowed OpenFlow version(default: OpenFlow10, OpenFlow11, OpenFlow12, OpenFlow13, OpenFlow14)(设置允许的OpenFlow版本,后面是默认值)


### 示例


#### dump-flows SWITCH




![](https://img-blog.csdnimg.cn/20200316200754982.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70)

 dump-flows 
 


dpctl命令的这个dump-flows选项默认打印所有交换机的,这个必须得添加参数。


#### del-flows


后面需要至少一个参数,也可以多个,例如删除交换机s1中所有入端口2的流表项,sh ovs-ofctl del-flows s1 in\_port=2




![](https://img-blog.csdnimg.cn/20200316201708243.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhZHlfa2lsbGVyOQ==,size_16,color_FFFFFF,t_70)

 del-flows命令-删除交换机s1的所有流表项 
 


#### add-flows


后面加两个参数 交换机 以及端口动作等信息




![](https://img-blog.csdnimg.cn/20200316202158618.PNG)

 add-flows向s1添加两个流表项 
 




### 一、网安学习成长路线图


网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/aa7be04dc8684d7ea43acc0151aebbf1.png)


### 二、网安视频合集


观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0aeee2eec7a48f4ad7d083932cb095d.png)


### 三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/078ea1d4cda342f496f9276a4cda5fcf.png)


### 四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。  
 **需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

![在这里插入图片描述](https://img-blog.csdnimg.cn/e54c0bac8f3049928b488dc1e5080fc5.png)


### 五、网络安全面试题


最后就是大家最关心的网络安全面试题板块  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/15c1192cad414044b4dd41f3df44433d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b07abbfab1fd4edc800d7db3eabb956e.png)  



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

到,可以学到不一样的思路。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/078ea1d4cda342f496f9276a4cda5fcf.png)


### 四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。  
 **需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

![在这里插入图片描述](https://img-blog.csdnimg.cn/e54c0bac8f3049928b488dc1e5080fc5.png)


### 五、网络安全面试题


最后就是大家最关心的网络安全面试题板块  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/15c1192cad414044b4dd41f3df44433d.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/b07abbfab1fd4edc800d7db3eabb956e.png)  



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值