From Netkit Wiki
Revision as of 13:18, 3 December 2009 by Admin (Talk | contribs)
(diff) ← Older revision | Current revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Netkit is a lightweight network emulator based on open source software. It offers an easy-to-use interface to set up emulated network experiences (labs) with little effort, thus enabling users to experiment with several networking technologies at low cost, with no impact on operational networks, and without the hassle of dealing with tricky emulation parameters instead of configuring the network itself. Netkit also provides users with tools to support sharing preconfigured virtual labs with others, in such a way that "replaying" a lab is as simple as typing a single command. Netkit is also accompanied by a corpus of ready-to-use labs and lecture slides that can be used to learn, teach, or experiment with different networking topics.

Netkit makes use of User-mode Linux (UML), a port of the Linux kernel that is designed to run as a userspace process. Network devices are emulated in Netkit as UML virtual machines that run a full-fledged Debian GNU/Linux distribution. A virtual machine can be turned to a specific network device (e.g., a router) by running appropriate software (e.g., zebra). Virtual machines are interconnected on a virtual network by means of a virtual hub software running on the host. Optionally, the virtual hub can be connected to an external network, for example in order to gain access to the Internet from the virtual machines. The setup of virtual machines and virtual hubs is automatically performed by the Netkit user space tools.

Netkit ships with a variety of supported networking tools and technologies. Should it be needed, additional software can also be installed inside the virtual machines in order to enable particular features that are required for specific experiments. The following is a partial list of the currently supported technologies:


Generic Networking

  • Physical Layer
    • Ethernet physical layer (kernel level support)
  • Data Link Layer
    • 802.1D bridging and Spanning Tree Protocol (brctl)
    • 802.1Q VLAN tagging (vconfig)
    • PPP
  • Label Switching
    • MPLS label based forwarding
    • Manipulation of label stacks
    • Distribution of labels via LDP
  • Network Layer
    • ARP and RARP address resolution (kernel level support)
    • ICMP control messages (ping, traceroute)
    • IPv4 and IPv6 routing (kernel level support)
  • Transport Layer
    • TCP (kernel level support)
    • UDP (kernel level support)
  • Application Layer
    • DHCP autoconfiguration
    • DNS, both server side (bind) and client side (host, dig)
    • E-mail transfer via SMTP, POP, IMAP (exim)
    • FTP and TFTP, both server side (atftpd, ftpd, proftpd, tftpd) and client side (atftp, ftp, ncftp, tftp)
    • HTTP and HTTPS (apache)
    • NFS
    • Telnet
    • Samba
    • SSH
    • Web proxying (squid)


  • Label Switching (MPLS)
  • Routing Protocols
    • BGP (quagga/XORP)
    • OSPF (quagga/XORP)
    • RIP (quagga/XORP)
    • Load balancing by equal cost multipath
  • Multicast
    • PIM-SM multicast

Security Tools

  • IPsec transport and tunnel mode, ESP and AH
  • IKE (openswan, racoon)
  • Intrusion Detection Systems (snort)
  • RADIUS (freeradius)

Packet Manipulation

  • Encapsulation
    • GRE tunnels
    • MPLS tunnels
  • Packet Capturing and Dissection
    • Ettercap
    • Ssldump
    • Tcpdump
    • Tcpreen
    • Tethereal
  • Packet Filtering
    • Packet filtering and mangling with the netfilter framework (including NAT)
  • Packet Forging
    • Dsniff
    • Hping
    • Sendip
    • Tcpreplay


  • Scripting Languages
    • Awk
    • Bash
    • Expect
    • Python
Personal tools