第1次实践作业
1. 实践内容
(1)官方练习
-
tutorials/exercises/basic at master · p4lang/tutorials (github.com)
step1:运行不完整代码,发现不通
![]()
![]()
step2、3:补充代码,实现三层转发,再运行
![]()
-
tutorials/exercises/basic_tunnel at master · p4lang/tutorials (github.com)
step1、2:实施基本隧道、并运行
运行,开启h1、h2两个终端:xterm h1 h2
![]()
在 h2的 xterm 中,启动服务器:./receive.py
![]()
无隧道情况下测试:
在h1的 xterm 中,发送消息至 h2:./send.py 10.0.2.2 "P4 is cool",h2(got a packet)
![]()
在h1的 xterm 中,发送消息至 h3:./send.py 10.0.2.3 "P4 is cool",h2(无反应)
![]()
用隧道测试:
在h1的 xterm 中,发送消息至h2:./send.py 10.0.2.2 "P4 is cool" --dst_id 2,h2(多了一个隧道标头)

在h1的 xterm 中,发送消息:./send.py 10.0.3.3 "P4 is cool" --dst_id 2,h2(还是能got a packet)

(2)回答问题
- 如果将basic和basic_tunnel项目文件移出tutorials/exercise目录,能否继续运行?如果不能运
行,怎样才能运行。
不能运行,因为试了一下。要继续运行,需要修改路径。 - 阅读basic实验提供的send.py和receive.py脚本,分析程序导入的python包scapy,说明各自的实
现逻辑是什么样的?
发送文件(send.py):
1.导入random、socket、sys,从scapy.all中导入IP, TCP, Ether, get_if_hwaddr, get_if_list, sendp
2.定义一个get_if()函数,检查是否存在接口(eth0),存在返回,不存在输出“找不到eth0接口”。
3.定义一个main()函数,如果参数小于3,则输出“传递2个参数:<目的地>" <消息>"”,返回等功能。
4.最后用一个判断语句,意味着可以从其他脚本调用main()传递自定义参数。
接收文件(receive.py):
1.导入os、sys,从scapy.all中导入TCP,FieldLenField,FieldListField,IntField,IPOption,ShortField,get_if_list
2.定义一个get_if()函数,检查是否存在接口(eth0),存在返回,不存在输出“找不到eth0接口”。
3.定义一个类IPOption。
4.定义一个handle_pkt(pkt)函数,如果端口目标是1234,则输出“收到一个包”。
5.定义一个main()函数,主要是“嗅探”接口上的流量。
实验总结
一开始尝试使用VScode写报告,但是图片一直黏贴不上去,就放弃了。下周争取。








浙公网安备 33010602011771号