Ceng435 Project Phase1
Ceng435 Project Phase1
Ceng435 Project Phase1
CENG 435
Data Communications and Networking
Programming Assignment - Phase 1
Due Date: 5 November 2024 (Tuesday) - 23:59
1 Introduction
In this assignment, you are going to create a basic ICMP sender and receiver application in a container
environment. You will use Python programming language with a specific version (Python 3.10.12). You do not
have to create an environment for this assignment, instead, it was designed and shared with you as a docker
environment. Additionally, you will use Git to clone the project that was created for the assignment.
You will work as a group of two students, and in the second phase you will continue with the same group,
therefore; please fill the grouping assignment in ODTUClass before submitting the assignment.
With this assignment, you will gain introductory information for various important computer engineering skills.
In your remaining work life, you will improve these skills, however; this programming assignment might be an
introductory point for that.
In this assignment, you are going to
• fork the shared public repository to your own account and clone it to your local to work on it (only one of
the team members should do it, the other member should be added as a collaborator.),
• create two containers using the docker-compose.yaml file which generates the images using the relevant
Dockerfile,
• implement and run the ICMP packet sender and receiver using SCAPY,
• create a documentation using an automatic documentation system (Sphinx) (note that you will have to write
the report and also document the source codes extensively using restructedtext and the Sphinx makefile is
already provided.),
1
2.1 Cloning GitHub Repository
First of all, you should open a GitHub account to fork the existing repository (covertovert). Forking is a
copying process of an existing repository to a new repository that is in your own account. To fork an existing
repository, click the fork on the upper right in the ‘covertovert’ repository and follow the instructions.
Afterward, you should open a new directory for the assignment on your local machine to work on it and clone
the forked repository that is in your GitHub account. To clone the repository, you should click the code on the
upper right, copy the command, and run the copied command in a terminal window which is in your newly created
folder.
Note: According to the operating system you use, you may need to install Git if it is not automatically
installed. To install, you can follow the instructions in the link.
2
After a successful run, you should check the ‘ build/html’ folder, and you will see the automatically generated
documentation of your codes.
Note: While Sphinx creates the documentation files for you automatically, it runs the ‘icmp receiver.py’ and
‘icmp sender.py’ files. Therefore, you should comment in the lines where it waits for the incoming packet.
Note: As you will see when you open the automatically generated documentation files (‘index.html’), you
have to change the ‘index.rst’ file by replacing the text with your names and group ID. After changing, you can
safely rerun the ‘make html’ command.
In addition to the documentation created by Sphinx, a basic report for the assignment (.md file) should be
created, that includes the following information:
• Group ID,
• GitHub repository link in your own account which was forked from ‘covertovert’.
The ‘ı̀cmp sender’ and ‘ı̀cmp receiver’ will be run and tested (black box). Therefore, when we run the
‘ı̀cmp receiver’, it should wait for the incoming packet, and when we run the ‘ı̀cmp sender’, it should send an
ICMP packet whose TTL is 1. The testing process will include two steps, black-box testing and white-box testing.
If your code does not pass the black-box test, you will get a 0 from the coding part. However, if your code is
passed, a white-box test will also be applied to check whether you have followed the restrictions.
The grading of the assignment will be conducted using the rules shown below.
• ICMP sender and receiver that passes black-box and white-box testing (60 pts)