Docs

Download and Install

First download and install the latest version of fnlag from the install page.

How To Use

From the File menu, select Open Device.  Click on a device to open and press the OK button.

From the Tools menu, select Hosts.  Press the Scan button and wait until the scan is complete. Then press the OK button.

From the drop downs on the main screen, select the two hosts.  Between each host, are text fields that can be modified to alter how network packets travel between the hosts.

The fields are from left to right:

  • Percent of loss from host 1 to host 2 (0.0 to 1.0)
  • Seconds to delay from host 1 to host 2 (0.0 to 60.0)*
  • Seconds to cycle on and off from host 1 to host 2 (0.0 to 60.0)
  • Percent of loss from host 2 to host 1 (0.0 to 1.0)
  • Seconds to delay from host 2 to host 1 (0.0 to 60.0)*
  • Seconds to cycle on and off from host 2 to host 1 (0.0 to 60.0)

*Setting a delay too high above what your system can handle will cause fnlag to stall

Time On is the amount of seconds you wish to run.  A time of zero indicates to run until manually stopped. Press the Start button to start intercepting packets and Stop to stop.  To modify the field while running, change the field value and then press the Update button. To reset the fields back to zero, press the Clear button. When running, the status bar indicates statistics of average loss, average delay and total packets for host 1 and host 2.

How It Works

Fnlag is able to intercept networks packets through a process called arp spoofing.  On a switched network, host 1 and host 2 are aware of each other from their individual ip addresses, therefore can communicate.

When fnlag is started, it convinces host 1 that it is host 2 and convinces host 2 that it is host 1.  Host 1 will then send all of it’s packets destined for host 2 to fnlag and host 2 will send all of it’s packets destined to host 1 to fnlag. Once fnlag receives a packet, it can decide what to do with the packet (i.e. drop or delay it), then forwards it on as if it were coming from the original host.

 

Demo

Based on the following network topology:

                      Router (10.0.2.1)
                              |
         .------------------------------------------.
         |                    |                     |
Host 1 (10.0.2.2)     Host 2 (10.0.2.3)     Fnlag (10.0.2.15)

A value of 0.5 is entered into the first field to drop an average of 50% of the packets from host 1 to host 2. The Start button is then clicked.

From a shell on host 1, the following command is run:
$ ping 10.0.2.3
PING
10.0.2.3 (10.0.2.3): 56 data bytes
64 bytes from
10.0.2.3: seq=0 ttl=64 time=2.973 ms
64 bytes from
10.0.2.3: seq=2 ttl=64 time=1.968 ms
64 bytes from
10.0.2.3: seq=5 ttl=64 time=1.925 ms
64 bytes from
10.0.2.3: seq=6 ttl=64 time=1.972 ms
64 bytes from
10.0.2.3: seq=9 ttl=64 time=2.279 ms

---
10.0.2.3 ping statistics ---
10 packets transmitted, 5 packets received, 50% packet loss
round-trip min/avg/max = 1.925/2.223/2.973 ms

Notice 10 packets were transmitted, however only 5 packets were received or equivalent to 50% packet loss. Fnlag dropped 5 out of the 10 packets destined to host 2 (i.e. 5 packets never arrived to host 2).

A value of 0.1 is entered into the second field to delay packets from host 1 to host 2 by an average of 100 milliseconds.

$ ping 10.0.2.3
PING 10.0.2.3 (10.0.2.3): 56 data bytes
64 bytes from
10.0.2.3: seq=0 ttl=64 time=101.002 ms
64 bytes from
10.0.2.3: seq=1 ttl=64 time=100.878 ms
64 bytes from
10.0.2.3: seq=2 ttl=64 time=100.882 ms
64 bytes from
10.0.2.3: seq=3 ttl=64 time=100.884 ms
64 bytes from
10.0.2.3: seq=4 ttl=64 time=100.863 ms

---
10.0.2.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 100.863/100.901/101.002 ms

Notice the average time increased approximately by 100 milliseconds.

A value of 0.1 is entered into the second field to delay packets from host 1 to host 2 by an average of 100 milliseconds and a value of 0.2 is entered into the fifth field to delay packets from host 2 to host 1 by an average of 200 milliseconds.

$ ping 10.0.2.3
PING 10.0.2.3 (10.0.2.3): 56 data bytes
64 bytes from
10.0.2.3: seq=0 ttl=64 time=301.000 ms
64 bytes from
10.0.2.3: seq=1 ttl=64 time=300.830 ms
64 bytes from
10.0.2.3: seq=2 ttl=64 time=301.375 ms
64 bytes from
10.0.2.3: seq=3 ttl=64 time=300.405 ms
64 bytes from
10.0.2.3: seq=4 ttl=64 time=301.014 ms

---
10.0.2.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 300.405/300.924/301.375 ms

Notice the average time increased approximately by 300 milliseconds.  The time from host 1 to host 2 was delayed by 100 milliseconds and the time from host 2 to host 1 was delayed by 200 milliseconds for a total delay of approximately 300 milliseconds.

A value of 0.1 is entered into the second field to delay packets from host 1 to host 2 by an average of 100 milliseconds and a value of 0.5 is entered into the third field to cycle on and off every 0.5 second.

$ ping 10.0.2.3
PING 10.0.2.3 (10.0.2.3): 56 data bytes
64 bytes from
10.0.2.3: seq=0 ttl=64 time=101.983 ms
64 bytes from
10.0.2.3: seq=1 ttl=64 time=1.530 ms
64 bytes from
10.0.2.3: seq=2 ttl=64 time=101.581 ms
64 bytes from
10.0.2.3: seq=3 ttl=64 time=1.519 ms
64 bytes from
10.0.2.3: seq=4 ttl=64 time=101.397 ms

---
10.0.2.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 1.519/61.602/101.983 ms

Notice the packets arrived in a cycle of no delay and 100 millisecond delay repeatedly.

Video Demos