写在前面


本实验参考

  • POX脚本设置好控制器的转发策略,所以只要理解脚本。
  • mininet脚本设置好拓扑和相关信息,所以也只要理解脚本。
  • POX脚本目前基本看不懂。
  • 本实验我学会了:POX控制器Web界面,第一次真正的看到了流表项。

实验拓扑


  • 在该环境下,假设H1 ping H4,初始的路由规则是S1-S2-S5,一秒后,路由转发规则变为S1-S3-S5,再过一秒,规则变为S1-S4-S5,然后再回到最初的转发规则S1-S2-S5。通过这个循环调度的例子动态地改变交换机的转发规则。

实验步骤


1.搭建环境

  • 安装了mininet的虚拟机。
  • 安装了pox的虚拟机。

2.创建脚本

  • /pox目录下新建文件lab_controller.py,编辑其内容:
  1. from pox.core import core
  2. import pox.openflow.libopenflow_01 as of
  3. from pox.lib.util import dpidToStr
  4. from pox.lib.addresses import IPAddr, EthAddr
  5. from pox.lib.packet.arp import arp
  6. from pox.lib.packet.ethernet import ethernet, ETHER_BROADCAST
  7. from pox.lib.packet.packet_base import packet_base
  8. from pox.lib.packet.packet_utils import *
  9. import pox.lib.packet as pkt
  10. from pox.lib.recoco import Timer
  11. import time
  12. log = core.getLogger()
  13. s1_dpid=0
  14. s2_dpid=0
  15. s3_dpid=0
  16. s4_dpid=0
  17. s5_dpid=0
  18. s1_p1=0
  19. s1_p4=0
  20. s1_p5=0
  21. s1_p6=0
  22. s2_p1=0
  23. s3_p1=0
  24. s4_p1=0
  25. pre_s1_p1=0
  26. pre_s1_p4=0
  27. pre_s1_p5=0
  28. pre_s1_p6=0
  29. pre_s2_p1=0
  30. pre_s3_p1=0
  31. pre_s4_p1=0
  32. turn=0
  33. def getTheTime(): #fuction to create a timestamp
  34. flock = time.localtime()
  35. then = "[%s-%s-%s" %(str(flock.tm_year),str(flock.tm_mon),str(flock.tm_mday))
  36. if int(flock.tm_hour)<10:
  37. hrs = "0%s" % (str(flock.tm_hour))
  38. else:
  39. hrs = str(flock.tm_hour)
  40. if int(flock.tm_min)<10:
  41. mins = str(flock.tm_min)
  42. secs = "0%s" % (str(flock.tm_sec))
  43. else:
  44. secs = str(flock.tm_sec)
  45. then +="]%s.%s.%s" % (hrs,mins,secs)
  46. return then
  47. def _timer_func ():
  48. global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid,turn
  49. #print getTheTime(), "sent the port stats request to s1_dpid"
  50. if turn==0:
  51. msg = of.ofp_flow_mod()
  52. msg.command=of.OFPFC_MODIFY_STRICT
  53. msg.priority =100
  54. msg.idle_timeout = 0
  55. msg.hard_timeout = 0
  56. msg.match.dl_type = 0x0800
  57. msg.match.nw_dst = "10.0.0.4"
  58. msg.actions.append(of.ofp_action_output(port = 5))
  59. core.openflow.getConnection(s1_dpid).send(msg)
  60. turn=1
  61. return
  62. if turn==1:
  63. msg = of.ofp_flow_mod()
  64. msg.command=of.OFPFC_MODIFY_STRICT
  65. msg.priority =100
  66. msg.idle_timeout = 0
  67. msg.hard_timeout = 0
  68. msg.match.dl_type = 0x0800
  69. msg.match.nw_dst = "10.0.0.4"
  70. msg.actions.append(of.ofp_action_output(port = 6))
  71. core.openflow.getConnection(s1_dpid).send(msg)
  72. turn=2
  73. return
  74. if turn==2:
  75. msg = of.ofp_flow_mod()
  76. msg.command=of.OFPFC_MODIFY_STRICT
  77. msg.priority =100
  78. msg.idle_timeout = 0
  79. msg.hard_timeout = 0
  80. msg.match.dl_type = 0x0800
  81. msg.match.nw_dst = "10.0.0.4"
  82. msg.actions.append(of.ofp_action_output(port = 4))
  83. turn=0
  84. return
  85. def _handle_portstats_received (event):
  86. global s1_p1,s1_p4, s1_p5, s1_p6, s2_p1, s3_p1, s4_p1
  87. global pre_s1_p1,pre_s1_p4, pre_s1_p5, pre_s1_p6, pre_s2_p1, pre_s3_p1, pre_s4_p1
  88. if event.connection.dpid==s1_dpid:
  89. for f in event.stats:
  90. if int(f.port_no)<65534:
  91. if f.port_no==1:
  92. pre_s1_p1=s1_p1
  93. s1_p1=f.rx_packets
  94. if f.port_no==4:
  95. pre_s1_p4=s1_p4
  96. s1_p4=f.tx_packets
  97. #s1_p4=f.tx_bytes
  98. if f.port_no==5:
  99. pre_s1_p5=s1_p5
  100. s1_p5=f.tx_packets
  101. if f.port_no==6:
  102. pre_s1_p6=s1_p6
  103. s1_p6=f.tx_packets
  104. for f in event.stats:
  105. if int(f.port_no)<65534:
  106. if f.port_no==1:
  107. pre_s2_p1=s2_p1
  108. s2_p1=f.rx_packets
  109. #s2_p1=f.rx_bytes
  110. if event.connection.dpid==s3_dpid:
  111. for f in event.stats:
  112. if int(f.port_no)<65534:
  113. if f.port_no==1:
  114. pre_s3_p1=s3_p1
  115. s3_p1=f.rx_packets
  116. if event.connection.dpid==s4_dpid:
  117. for f in event.stats:
  118. if int(f.port_no)<65534:
  119. if f.port_no==1:
  120. pre_s4_p1=s4_p1
  121. s4_p1=f.rx_packets
  122. def _handle_ConnectionUp (event):
  123. global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid
  124. print "ConnectionUp: ",dpidToStr(event.connection.dpid)
  125. #remember the connection dpid for switch
  126. for m in event.connection.features.ports:
  127. if m.name == "s1-eth1":
  128. s1_dpid = event.connection.dpid
  129. print "s1_dpid=", s1_dpid
  130. elif m.name == "s2-eth1":
  131. s2_dpid = event.connection.dpid
  132. print "s2_dpid=", s2_dpid
  133. elif m.name == "s3-eth1":
  134. s3_dpid = event.connection.dpid
  135. elif m.name == "s4-eth1":
  136. s4_dpid = event.connection.dpid
  137. print "s4_dpid=", s4_dpid
  138. elif m.name == "s5-eth1":
  139. s5_dpid = event.connection.dpid
  140. print "s5_dpid=", s5_dpid
  141. if s1_dpid<>0 and s2_dpid<>0 and s3_dpid<>0 and s4_dpid<>0:
  142. Timer(1, _timer_func, recurring=True)
  143. def _handle_PacketIn(event):
  144. global s1_dpid, s2_dpid, s3_dpid, s4_dpid, s5_dpid
  145. packet=event.parsed
  146. if event.connection.dpid==s1_dpid:
  147. a=packet.find('arp')
  148. if a and a.protodst=="10.0.0.4":
  149. msg = of.ofp_packet_out(data=event.ofp)
  150. msg.actions.append(of.ofp_action_output(port=4))
  151. event.connection.send(msg)
  152. if a and a.protodst=="10.0.0.5":
  153. msg = of.ofp_packet_out(data=event.ofp)
  154. msg.actions.append(of.ofp_action_output(port=5))
  155. event.connection.send(msg)
  156. if a and a.protodst=="10.0.0.6":
  157. msg = of.ofp_packet_out(data=event.ofp)
  158. msg.actions.append(of.ofp_action_output(port=6))
  159. event.connection.send(msg)
  160. if a and a.protodst=="10.0.0.1":
  161. msg = of.ofp_packet_out(data=event.ofp)
  162. msg.actions.append(of.ofp_action_output(port=1))
  163. event.connection.send(msg)
  164. if a and a.protodst=="10.0.0.2":
  165. msg = of.ofp_packet_out(data=event.ofp)
  166. msg.actions.append(of.ofp_action_output(port=2))
  167. event.connection.send(msg)
  168. if a and a.protodst=="10.0.0.3":
  169. msg = of.ofp_packet_out(data=event.ofp)
  170. msg.actions.append(of.ofp_action_output(port=3))
  171. event.connection.send(msg)
  172. msg = of.ofp_flow_mod()
  173. msg.priority =100
  174. msg.idle_timeout = 0
  175. msg.hard_timeout = 0
  176. msg.match.dl_type = 0x0800
  177. msg.match.nw_dst = "10.0.0.1"
  178. msg.actions.append(of.ofp_action_output(port = 1))
  179. event.connection.send(msg)
  180. msg = of.ofp_flow_mod()
  181. msg.priority =100
  182. msg.idle_timeout = 0
  183. msg.hard_timeout = 0
  184. msg.match.dl_type = 0x0800
  185. msg.match.nw_dst = "10.0.0.2"
  186. msg.actions.append(of.ofp_action_output(port = 2))
  187. event.connection.send(msg)
  188. msg = of.ofp_flow_mod()
  189. msg.priority =100
  190. msg.idle_timeout = 0
  191. msg.hard_timeout = 0
  192. msg.match.dl_type = 0x0800
  193. msg.match.nw_dst = "10.0.0.3"
  194. msg.actions.append(of.ofp_action_output(port = 3))
  195. event.connection.send(msg)
  196. msg = of.ofp_flow_mod()
  197. msg.priority =100
  198. msg.idle_timeout = 0
  199. msg.hard_timeout = 1
  200. msg.match.dl_type = 0x0800
  201. msg.match.nw_dst = "10.0.0.4"
  202. msg.actions.append(of.ofp_action_output(port = 4))
  203. event.connection.send(msg)
  204. msg = of.ofp_flow_mod()
  205. msg.priority =100
  206. msg.idle_timeout = 0
  207. msg.hard_timeout = 0
  208. msg.match.dl_type = 0x0800
  209. msg.match.nw_dst = "10.0.0.5"
  210. msg.actions.append(of.ofp_action_output(port = 5))
  211. event.connection.send(msg)
  212. msg = of.ofp_flow_mod()
  213. msg.priority =100
  214. msg.idle_timeout = 0
  215. msg.hard_timeout = 0
  216. msg.match.dl_type = 0x0800
  217. msg.match.nw_dst = "10.0.0.6"
  218. msg.actions.append(of.ofp_action_output(port = 6))
  219. event.connection.send(msg)
  220. elif event.connection.dpid==s2_dpid:
  221. msg = of.ofp_flow_mod()
  222. msg.priority =10
  223. msg.idle_timeout = 0
  224. msg.hard_timeout = 0
  225. msg.match.in_port = 1
  226. msg.match.dl_type=0x0806
  227. msg.actions.append(of.ofp_action_output(port = 2))
  228. event.connection.send(msg)
  229. msg = of.ofp_flow_mod()
  230. msg.priority =10
  231. msg.idle_timeout = 0
  232. msg.hard_timeout = 0
  233. msg.match.in_port = 1
  234. msg.match.dl_type=0x0800
  235. msg.actions.append(of.ofp_action_output(port = 2))
  236. event.connection.send(msg)
  237. msg = of.ofp_flow_mod()
  238. msg.priority =10
  239. msg.idle_timeout = 0
  240. msg.hard_timeout = 0
  241. msg.match.in_port = 2
  242. msg.match.dl_type=0x0806
  243. msg.actions.append(of.ofp_action_output(port = 1))
  244. event.connection.send(msg)
  245. msg = of.ofp_flow_mod()
  246. msg.priority =10
  247. msg.idle_timeout = 0
  248. msg.hard_timeout = 0
  249. msg.match.in_port = 2
  250. msg.match.dl_type=0x0800
  251. msg.actions.append(of.ofp_action_output(port = 1))
  252. event.connection.send(msg)
  253. elif event.connection.dpid==s3_dpid:
  254. msg = of.ofp_flow_mod()
  255. msg.priority =10
  256. msg.idle_timeout = 0
  257. msg.hard_timeout = 0
  258. msg.match.in_port = 1
  259. msg.match.dl_type=0x0806
  260. msg.actions.append(of.ofp_action_output(port = 2))
  261. event.connection.send(msg)
  262. msg = of.ofp_flow_mod()
  263. msg.priority =10
  264. msg.idle_timeout = 0
  265. msg.hard_timeout = 0
  266. msg.match.in_port = 1
  267. msg.match.dl_type=0x0800
  268. msg.actions.append(of.ofp_action_output(port = 2))
  269. event.connection.send(msg)
  270. msg = of.ofp_flow_mod()
  271. msg.priority =10
  272. msg.idle_timeout = 0
  273. msg.hard_timeout = 0
  274. msg.match.in_port = 2
  275. msg.match.dl_type=0x0806
  276. msg.actions.append(of.ofp_action_output(port = 1))
  277. event.connection.send(msg)
  278. msg = of.ofp_flow_mod()
  279. msg.priority =10
  280. msg.idle_timeout = 0
  281. msg.hard_timeout = 0
  282. msg.match.in_port = 2
  283. msg.match.dl_type=0x0800
  284. msg.actions.append(of.ofp_action_output(port = 1))
  285. event.connection.send(msg)
  286. elif event.connection.dpid==s4_dpid:
  287. msg = of.ofp_flow_mod()
  288. msg.priority =10
  289. msg.idle_timeout = 0
  290. msg.hard_timeout = 0
  291. msg.match.in_port = 1
  292. msg.match.dl_type=0x0806
  293. msg.actions.append(of.ofp_action_output(port = 2))
  294. event.connection.send(msg)
  295. msg = of.ofp_flow_mod()
  296. msg.priority =10
  297. msg.idle_timeout = 0
  298. msg.hard_timeout = 0
  299. msg.match.in_port = 1
  300. msg.match.dl_type=0x0800
  301. msg.actions.append(of.ofp_action_output(port = 2))
  302. event.connection.send(msg)
  303. msg = of.ofp_flow_mod()
  304. msg.priority =10
  305. msg.idle_timeout = 0
  306. msg.hard_timeout = 0
  307. msg.match.in_port = 2
  308. msg.match.dl_type=0x0806
  309. msg.actions.append(of.ofp_action_output(port = 1))
  310. event.connection.send(msg)
  311. msg = of.ofp_flow_mod()
  312. msg.priority =10
  313. msg.idle_timeout = 0
  314. msg.hard_timeout = 0
  315. msg.match.in_port = 2
  316. msg.match.dl_type=0x0800
  317. msg.actions.append(of.ofp_action_output(port = 1))
  318. event.connection.send(msg)
  319. elif event.connection.dpid==s5_dpid:
  320. a=packet.find('arp')
  321. if a and a.protodst=="10.0.0.4":
  322. msg = of.ofp_packet_out(data=event.ofp)
  323. msg.actions.append(of.ofp_action_output(port=4))
  324. event.connection.send(msg)
  325. if a and a.protodst=="10.0.0.5":
  326. msg = of.ofp_packet_out(data=event.ofp)
  327. msg.actions.append(of.ofp_action_output(port=5))
  328. event.connection.send(msg)
  329. if a and a.protodst=="10.0.0.6":
  330. msg = of.ofp_packet_out(data=event.ofp)
  331. msg.actions.append(of.ofp_action_output(port=6))
  332. event.connection.send(msg)
  333. if a and a.protodst=="10.0.0.1":
  334. msg = of.ofp_packet_out(data=event.ofp)
  335. msg.actions.append(of.ofp_action_output(port=1))
  336. event.connection.send(msg)
  337. if a and a.protodst=="10.0.0.2":
  338. msg = of.ofp_packet_out(data=event.ofp)
  339. msg.actions.append(of.ofp_action_output(port=2))
  340. event.connection.send(msg)
  341. if a and a.protodst=="10.0.0.3":
  342. msg = of.ofp_packet_out(data=event.ofp)
  343. msg.actions.append(of.ofp_action_output(port=3))
  344. event.connection.send(msg)
  345. msg = of.ofp_flow_mod()
  346. msg.priority =100
  347. msg.idle_timeout = 0
  348. msg.hard_timeout = 0
  349. msg.match.dl_type = 0x0800
  350. msg.match.nw_dst = "10.0.0.1"
  351. msg.actions.append(of.ofp_action_output(port = 1))
  352. event.connection.send(msg)
  353. msg = of.ofp_flow_mod()
  354. msg.priority =100
  355. msg.idle_timeout = 0
  356. msg.hard_timeout = 0
  357. msg.match.dl_type = 0x0800
  358. msg.match.nw_dst = "10.0.0.2"
  359. msg.actions.append(of.ofp_action_output(port = 2))
  360. event.connection.send(msg)
  361. msg = of.ofp_flow_mod()
  362. msg.priority =100
  363. msg.idle_timeout = 0
  364. msg.hard_timeout = 0
  365. msg.match.dl_type = 0x0800
  366. msg.match.nw_dst = "10.0.0.3"
  367. msg.actions.append(of.ofp_action_output(port = 3))
  368. event.connection.send(msg)
  369. msg = of.ofp_flow_mod()
  370. msg.priority =100
  371. msg.idle_timeout = 0
  372. msg.hard_timeout = 0
  373. msg.match.dl_type = 0x0800
  374. msg.match.nw_dst = "10.0.0.4"
  375. msg.actions.append(of.ofp_action_output(port = 4))
  376. event.connection.send(msg)
  377. msg = of.ofp_flow_mod()
  378. msg.priority =100
  379. msg.idle_timeout = 0
  380. msg.hard_timeout = 0
  381. msg.match.dl_type = 0x0800
  382. msg.match.nw_dst = "10.0.0.5"
  383. msg.actions.append(of.ofp_action_output(port = 5))
  384. event.connection.send(msg)
  385. msg = of.ofp_flow_mod()
  386. msg.priority =100
  387. msg.idle_timeout = 0
  388. msg.hard_timeout = 0
  389. msg.match.dl_type = 0x0800
  390. msg.match.nw_dst = "10.0.0.6"
  391. msg.actions.append(of.ofp_action_output(port = 6))
  392. event.connection.send(msg)
  393. def launch ():
  394. global start_time
  395. core.openflow.addListenerByName("PortStatsReceived",_handle_portstats_received)
  396. core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp)
  397. core.openflow.addListenerByName("PacketIn",_handle_PacketIn)
  • 该脚本实现了动态转发策略。
  • 我猜测基本思想应该是,基于时间来给交换机s1下发流表项。
  • 在Mininet中创建文件mymininet.py。编辑其内容为:
  1. #!/usr/bin/python
  2. from mininet.topo import Topo
  3. from mininet.net import Mininet
  4. from mininet.node import CPULimitedHost
  5. from mininet.link import TCLink
  6. from mininet.util import dumpNodeConnections
  7. from mininet.log import setLogLevel
  8. from mininet.node import Controller
  9. from mininet.cli import CLI
  10. from functools import partial
  11. from mininet.node import RemoteController
  12. import os
  13. class MyTopo(Topo):
  14. "Single switch connected to n hosts."
  15. def __init__(self):
  16. Topo.__init__(self)
  17. s1=self.addSwitch('s1')
  18. s2=self.addSwitch('s2')
  19. s3=self.addSwitch('s3')
  20. s4=self.addSwitch('s4')
  21. s5=self.addSwitch('s5')
  22. h1=self.addHost('h1')
  23. h2=self.addHost('h2')
  24. h3=self.addHost('h3')
  25. h4=self.addHost('h4')
  26. h5=self.addHost('h5')
  27. h6=self.addHost('h6')
  28. self.addLink(h1, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  29. self.addLink(h2, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  30. self.addLink(h3, s1, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  31. self.addLink(s1, s2, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  32. self.addLink(s1, s3, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  33. self.addLink(s1, s4, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  34. self.addLink(s2, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  35. self.addLink(s3, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  36. self.addLink(s4, s5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  37. self.addLink(s5, h4, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  38. self.addLink(s5, h5, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  39. self.addLink(s5, h6, bw=1, delay='10ms', loss=0, max_queue_size=1000, use_htb=True)
  40. def perfTest():
  41. "Create network and run simple performance test"
  42. topo = MyTopo()
  43. net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink, controller=partial(RemoteController, ip='10.0.0.13', port=6633))
  44. net.start()
  45. print "Dumping host connections"
  46. dumpNodeConnections(net.hosts)
  47. h1,h2,h3=net.get('h1','h2','h3')
  48. h4,h5,h6=net.get('h4','h5','h6')
  49. h1.setMAC("0:0:0:0:0:1")
  50. h2.setMAC("0:0:0:0:0:2")
  51. h3.setMAC("0:0:0:0:0:3")
  52. h4.setMAC("0:0:0:0:0:4")
  53. h5.setMAC("0:0:0:0:0:5")
  54. h6.setMAC("0:0:0:0:0:6")
  55. CLI(net)
  56. net.stop()
  57. if __name__ == '__main__':
  58. setLogLevel('info')
  59. perfTest()
  • 该脚本设置了拓扑。基本可以理解。

3.运行脚本

  • /pox目录下运行脚本lab_controller.py
  1. ./pox.py lab_controller
  • 在Mininet下运行脚本mymininet.py
  1. chmod +x mymininet.py
  2. ./mymininet.py
  • mininet终端信息

  • POX控制器终端信息

  • 现在我们通过h1向h4发包,来检测动态转发功能。
  • 在mininet终端输入:
  1. h1 ping -i 0.1 h4 #h1每秒向h4发10个包

  • 这时在POX界面并没有出现有用的信息,反而是一些warning信息。

4.解决方案

  • 既然在终端中没法看到发送的细节,我想到了Web界面。别的控制器都有UI界面POX也应该有吧?
  • 我在一篇博客中找到了POX UI界面的实现方式:Poxdesk。

参考博客

  • 运行POX脚本时要想使用poxdesk必须多加一些参数,对于本实验运行lab_controller.py时,命令如下:
  1. ./pox.py lab_controller web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk
  • 通用命令:
  1. ./pox.py 要运行的脚本 web messenger messenger.log_service messenger.ajax_transport openflow.of_service poxdesk
  • 浏览器中输入:http://pox-ip:8000/poxdesk 来访问界面,其中pox-ip是本机IP地址。
  • 进入Web界面后,我们打开s1的flowtable窗口。可以发现:对于目的是10.0.0.4(主机h4)的流表项在周期性变化,action中output端口在5,6之间切换。但是没有4(交换机s2),这个问题没有解决,可能是脚本本身的问题。

5.具体的连接图

  • 通过mininet中的net命令可以得拓扑的详细信息,我简单的画了个示意图便于理解:

存在问题


  • 端口切换时,为什么不能切换到s2?

mininet实验 动态改变转发规则实验的更多相关文章

  1. Mininet系列实验(六):Mininet动态改变转发规则实验

    一. 实验目的 熟悉Mininet自定义拓扑脚本的编写:熟悉编写POX脚本动态改变转发规则 二.实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为.在本实验中,基于Mi ...

  2. Mininet实验 动态改变转发规则

    介绍 拓扑如下: 在该环境下,假设H1 ping H4,初始的路由规则是S1-S2-S5,一秒后,路由转发规则变为S1-S3-S5,再过一秒,规则变为S1-S4-S5,然后再回到最初的转发规则S1-S ...

  3. SSH的本地、远程、动态端口转发实验笔记

    SSH端口转发 SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务.这一 ...

  4. Mininet实验 基于Mininet实现BGP路径挟持攻击实验

    参考:基于Mininet实现BGP路径挟持攻击实验 实验目的: 掌握如何mininet内模拟AS. 掌握BGP路径挟持的原理和分析过程. 实验原理: 互联网是由相互连接的自治系统AS组成的,通过一个通 ...

  5. 实验 4 :Open vSwitch 实验 —— Mininet 中使用 OVS 命令

    实验 4 :Open vSwitch 实验 -- Mininet 中使用 OVS 命令 一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调 ...

  6. OpenDayLight Helium实验三 OpenDaylight二层转发机制实验 2

    鉴于在个人笔记本上虚拟机运行ODL实在太慢,把实验的场景搬到了实验室. 实验上:OpenDayLight Helium实验三 OpenDaylight二层转发机制实验 抓包实验 紧接着,在运行Mini ...

  7. OpenDayLight Helium实验三 OpenDaylight二层转发机制实验

    本文基于OpenDaylight二层转发机制实验 而成 在SDN网络中,处于末端的主机并不知道其连接的网络是SDN,某台主机要发送数据包到另一台主机,仍然需要进行IP到MAC地址的ARP解析.SDN网 ...

  8. 哈工大 计算机网络 实验三 IPv4 分组收发实验&IPv4 分组转发实验

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 IPv4 分组收发实验&IPv4 分组转发实验 实验目的: (注:实验报告模板中的各项内容仅供参考,可依照实际实验情况进 ...

  9. 2017-2018-2 20155231《网络对抗技术》实验八: WEB基础实验

    2017-2018-2 20155231<网络对抗技术>实验八:Web基础 实验要求: Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与P ...

随机推荐

  1. 推荐一个网址:在线检查Yam文件语法格式的错误

    最近在学习Docker和K8S内容时候,经常会遇到要自己写一些容器部署或者组件部署的yaml文件. 但是苦于没有彻底熟悉yaml,有时候要到kubectl creat -f path 部署命令执行后, ...

  2. querySelectorAll 和 getElementBy 方法的区别

    作者:简生 链接:https://www.zhihu.com/question/24702250/answer/28695133 来源:知乎 1. W3C 标准 querySelectorAll 属于 ...

  3. iOS通过切片仿断点机制上传文件

    项目开发中,有时候我们需要将本地的文件上传到服务器,简单的几张图片还好,但是针对iPhone里面的视频文件进行上传,为了用户体验,我们有必要实现断点上传.其实也不是真的断点,这里我们只是模仿断点机制. ...

  4. MongoDB安装及启动

    本机环境系统:Debian 9桌面系统:KDE Plasma ## 官网下载自己系统最新稳定版 https://www.mongodb.com/download-center#community 选择 ...

  5. laravel Eloquent ORM联合查询出现Class not found,就算在Moel中存在这个类

    今天发现一个坑,在处理Eloquent ORM的联合查询时,一直报错Class 'AdminGroup' not found ,可是我的项目中明明存在这个类,如下 这是我的模型类: 它们的控制器方法: ...

  6. nginx 开启phpinfo

    在nginx配置文件中加 location / { //如果是资源文件,则不走phpinfo模式 if (!-e $request_filename){ ewrite ^/(.*)$ /index.p ...

  7. Python - 入门基础(一)

    1.解释器路径 #!/usr/bin/env python 2.编码 # -*- coding:utf8 -*- 1.ascill ---00000000  (8个位表示) 缺点:表示不了英文 2.u ...

  8. 有限差分法解矩形波导内场值、截止频率 MATLAB

    利用有限差分法,解矩形波导内场解和截止频率: 这里以解TM11模为例,利用双重迭代法,每4次场值,更新一次Kc: %% % 求矩形波导中TM11模 截面内场分布.截止频率kc和特性阻抗Zc % // ...

  9. HDFS(0.20.2)运营中急救方案

    这段时间折腾的都是hadoop和lucene,总结了hadoop在运营过程中出现问题时的解决方案,请大家指教! HDFS(0.20.2)运营中急救方案 1           Namenode 挂掉( ...

  10. 20155203 2016-2017-2 《Java程序设计》第1周学习总结

    20155203 2016-2017-2 <Java程序设计>第1周学习总结 学习目标 - 了解Java基础知识[第一章] Java是各应用平台的基础,Java分为三大平台:Java三大平 ...