]> git.gsnw.org Git - fping.git/commitdiff
Add a mode to use random bytes instead of NULLs.
authorAnthony DeRobertis <aderobertis@metrics.net>
Wed, 17 Dec 2014 18:50:53 +0000 (13:50 -0500)
committerAnthony DeRobertis <aderobertis@metrics.net>
Wed, 17 Dec 2014 18:50:53 +0000 (13:50 -0500)
This helps defeat data compression on links.

doc/fping.pod
src/fping.c

index a21e2ed4dcfbdd87ed55e139b79cff4f71ad6656..f1e8d550bd428aab59feda005f305e7ae2dc53f6 100644 (file)
@@ -151,6 +151,11 @@ Like B<-q>, but show summary results every n seconds.
 Retry limit (default 3). This is the number of times an attempt at pinging
 a target will be made, not including the first try. 
 
+=item B<-R>
+
+Instead of using all-zeros as the packet data, generate random bytes.
+Use to defeat, e.g., link data compression.
+
 =item B<-s>
 
 Print cumulative statistics upon exit. 
index 977a8ac836702ec208bbbcbfdd27ab6011a51048..c9cabdc1484073fe826b4c86c2373a775ffcb670 100644 (file)
@@ -300,6 +300,7 @@ int elapsed_flag, version_flag, count_flag, loop_flag;
 int per_recv_flag, report_all_rtts_flag, name_flag, addr_flag, backoff_flag;
 int multif_flag;
 int timestamp_flag = 0;
+int random_data_flag = 0;
 #if defined( DEBUG ) || defined( _DEBUG )
 int randomly_lose_flag, sent_times_flag, trace_flag, print_per_system_flag;
 int lose_factor;
@@ -381,7 +382,7 @@ int main( int argc, char **argv )
 
     /* get command line options */
 
-    while( ( c = getopt( argc, argv, "gedhlmnqusaAvDz:t:H:i:p:f:r:c:b:C:Q:B:S:I:T:O:" ) ) != EOF )
+    while( ( c = getopt( argc, argv, "gedhlmnqusaAvDRz:t:H:i:p:f:r:c:b:C:Q:B:S:I:T:O:" ) ) != EOF )
     {
         switch( c )
         {
@@ -477,6 +478,10 @@ int main( int argc, char **argv )
             timestamp_flag = 1;
             break;
 
+        case 'R':
+            random_data_flag = 1;
+            break;
+
         case 'l':
             loop_flag = 1;
             backoff_flag = 0;
@@ -1404,7 +1409,13 @@ int send_ping( int s, HOST_ENTRY *h )
     if( !buffer )
         crash_and_burn( "can't malloc ping packet" );
     
-    memset( buffer, 0, ping_pkt_size * sizeof( char ) );
+    if (random_data_flag) {
+        for (n = 0; n < ping_pkt_size; ++n) {
+            buffer[n] = random() & 0xFF;
+        }
+    } else {
+        memset( buffer, 0, ping_pkt_size * sizeof( char ) );
+    }
     icp = ( FPING_ICMPHDR* )buffer;
 
     gettimeofday( &h->last_send_time, &tz );
@@ -2662,6 +2673,7 @@ void usage(int is_error)
     fprintf(out, "   -q         quiet (don't show per-target/per-ping results)\n" );
     fprintf(out, "   -Q n       same as -q, but show summary every n seconds\n" );
     fprintf(out, "   -r n       number of retries (default %d)\n", DEFAULT_RETRY );
+    fprintf(out, "   -R         random packet data (to foil link data compression)\n" );
     fprintf(out, "   -s         print final stats\n" );
     fprintf(out, "   -S addr    set source address\n" );
     fprintf(out, "   -t n       individual target initial timeout (in millisec) (default %d)\n", timeout / 100 );