Giter Site home page Giter Site logo

internship-application-systems's Introduction

Cloudflare Internship Application: Systems

What is it?

Please write a small Ping CLI application for MacOS or Linux. The CLI app should accept a hostname or an IP address as its argument, then send ICMP "echo requests" in a loop to the target while receiving "echo reply" messages. It should report loss and RTT times for each sent message.

Please choose from among these languages: C/C++/Go/Rust

Useful Links

Requirements

1. Use one of the specified languages

Please choose from among C/C++/Go/Rust. If you aren't familiar with these languages, you're not alone! Many engineers join Cloudflare without specific langauge experience. Please consult A Tour of Go or The Rust Programming Language.

2. Build a tool with a CLI interface

The tool should accept as a positional terminal argument a hostname or IP address.

3. Send ICMP "echo requests" in an infinite loop

As long as the program is running it should continue to emit requests with a periodic delay.

4. Report loss and RTT times for each message

Packet loss and latency should be reported as each message received.

Submitting your project

When submitting your project, you should prepare your code for upload to Greenhouse. The preferred method for doing this is to create a "ZIP archive" of your project folder: for more instructions on how to do this on Windows and Mac, see this guide.

Please provide the source code only, a compiled binary is not necessary.

Using Libraries

You may use libraries (both built-in and installed via package managers) and system calls as necessary. Please don't use the ping built-in application or a full library implementation of ping.

Extra Credit

  1. Add support for both IPv4 and IPv6
  2. Allow to set TTL as an argument and report the corresponding "time exceeded” ICMP messages
  3. Any additional features listed in the ping man page or which you think would be valuable

internship-application-systems's People

Contributors

zackbloom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

internship-application-systems's Issues

Decoupling Sending and Receiving

From the task statement, it is unclear whether sending the ping and receiving the ping should happen sequentially (send -> wait -> receive -> send next ping -> wait -> receive next ping...) or concurrently. It seems that the Linux ping command adopts the concurrent paradigm (packets can be received out of order), while other similar programs/reimplementations use the sequential paradigm (likely for its simplicity). For this task, is there a preference on which paradigm we should implement?

Sorry if this is a bit unclear, since I am trying to be vague to not give away any hints, etc.

Use of External Libraries

I am very excited that Cloudflare is hosting this task for summer interns. However, I think there is an important aspect of this task that should be clarified: are external libraries (outside of the standard libraries that come with the languages) explicitly allowed? If so, how will they be bundled with our source code?

Thanks!

Overview of Project

Hello,
I want to wrap my head around the scope before I start. If we chose C/C++, is the user simply going to type ./a.out hostname|IP-address?

And then the program stops sending echo requests when the user types in a command C signal? Then when it stops it prints the statistics.

Basically this program should behave exactly like the unix ping command?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.