deadbit is an attempt at an ICMP based memory test (memtest) for routers and network equipment. It works by sending carefully crafted ICMP packets designed to exhaust every input possible when handling ICMP. In theory this could find the issue in situations where network equipment appears to be failing for certain ICMP packets and not others. Hopefully (and this is experimental even for me) if there is a dead bit in the router memory somewhere this test should be able to fail reliably and flush it out.
Couple caveats: This utility is experimental, even for me. At the time of writing I don't actually have a broken piece of network gear to test it against. Second - this utility expects to have some control over the ICMP sequence numbers of outgoing packets. If you are running other pings/traceroutes/whatever at the same time that will likely muck with the results. Finally - in tests that *do* depend on the sequence number, deadbit can't actually tell you what the dead bits *are* (it knows that it sent a 1 one time and a 0 the other, but doesn't know which is which). If you get a positive result and need to figure out whats actually happening you will want to use something like Wireshark to examine the actual packets.
It runs pretty slow by default, waiting politely 1 second between tests. If you want to finish in a reasonable amount of time, use "-i whatever" to set a much smaller wait period.
Like I said, highly experimental! If you have any success with it, or have any suggestions/fixes/complaints/whatever please let me know!
Deadbit (purports to) perform the following tests:
***************************************************************** deadbit.exe - written by Eli Fulkerson, Nov 2015 v0.2 - Nov 6 2015 - 20:21:04 http://www.elifulkerson.com/projects/deadbit.php for updates. ***************************************************************** Usage: deadbit [-f] [-m SIZE] host Flags: -f : Allow fragmentation of the packet. -w : Set the number of milliseconds to wait for a response (default 3000). -r : Set the maximum number of probe retries on timeout (default = 3). -i : Set the interval between two echo requests in ms (default 1000). -m : Sets a payload size to test. (Default is 1472) -v : Print version info and exit. -h,-? : Print usage information and exit.
C:\>deadbit -i 50 www.elifulkerson.com Testing: individual stuck data bits - 1 in a field of 0000...etc Will bisect if error found... passed: 0xFF in position(s) 0 through 1472 of 1472 bytes. (other bytes: 0x00) Testing: individual stuck data bits - 0 in a field of 1111...etc Will bisect if error found... passed: 0x00 in position(s) 0 through 1472 of 1472 bytes. (other bytes: 0xFF) Testing: each bit in the ICMP checksum passed: bit in position 0x8000 of checksum toggled. Testing: each possible 16 bit word addend that contributes to the checksum passed: checksum add register test starting at 0x102c0. Testing: all possible checksum carry values passed: chksum carry register test #89 of 90. Actual checksum unknown. Testing: each data packet consisting of one particular byte over and over passed: 0xFF repeating in position(s) 0 through 1472. ~ 0s left Testing: incrementing sequence numbers with same payload to test all possible 2 byte ICMP checksums... --- THIS TEST IS LAST AND TAKES FOREVER. --- --- FEEL FREE TO CTRL-C IF YOU DON'T CARE --- passed: ping #3815 of 65536. ~ 51m 26s left ctrl-c