第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写报告,但是图片一直黏贴不上去,就放弃了。下周争取。

posted @ 2023-03-05 23:48  yezine  阅读(145)  评论(0)    收藏  举报