reform.awk
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/bin/awk -f
  2. # This file converts tcpdump output into a hexdump with
  3. # ASCII strings on the right.  It replaces packet headers
  4. # with "*"s to reduce visual noise.
  5. #
  6. # Use it like:
  7. #  tcpdump -s 2000 -x [<filter options>] | reform.awk
  8. # To save a dump:
  9. #  tcpdump -s 2000 -w dumpfile
  10. # To replay it: 
  11. # tcpdump -x -s 2000 -r dumpfile | reform.awk
  12. function hexvalue(nybble) {
  13.     if (nybble=="0") { return  0; }
  14.     if (nybble=="1") { return  1; }
  15.     if (nybble=="2") { return  2; }
  16.     if (nybble=="3") { return  3; }
  17.     if (nybble=="4") { return  4; }
  18.     if (nybble=="5") { return  5; }
  19.     if (nybble=="6") { return  6; }
  20.     if (nybble=="7") { return  7; }
  21.     if (nybble=="8") { return  8; }
  22.     if (nybble=="9") { return  9; }
  23.     if (nybble=="a") { return 10; }
  24.     if (nybble=="b") { return 11; }
  25.     if (nybble=="c") { return 12; }
  26.     if (nybble=="d") { return 13; }
  27.     if (nybble=="e") { return 14; }
  28.     if (nybble=="f") { return 15; }
  29. }
  30. #                         ab67 483d cac9 08ca 3efb 35f8 9406 36e8
  31. {
  32.     if (substr($0,1,1)=="t") {
  33.         printf("    ");
  34.         str = "";
  35.         for (i=1; i<=NF; i++) {
  36.             nybble1 = substr($(i),1,1);
  37.             nybble2 = substr($(i),2,1);
  38.             byte1 = 16*hexvalue(nybble1)+hexvalue(nybble2);
  39.             if (headerleft) {
  40.                 headerleft--;
  41.                 printf("** ");
  42.                 str = str " ";
  43.             } else {
  44.                 printf("%02X ",byte1);
  45.                 if (byte1<32 || byte1>126) {
  46.                     str = str ".";
  47.                 } else {
  48.                     str = str sprintf("%c",0+byte1);
  49.                 }
  50.             }
  51.             
  52.             nybble3 = substr($(i),3,1);
  53.             nybble4 = substr($(i),4,1);
  54.             if (nybble3=="" && nybble4=="") {
  55.                 printf("   ");
  56.             } else {
  57.                 byte2 = 16*hexvalue(nybble3)+hexvalue(nybble4);
  58.                 if (headerleft) {
  59.                     headerleft--;
  60.                     printf("** ");
  61.                     str = str " ";
  62.                 } else {
  63.                     printf("%02X ",byte2);
  64.                     if (byte2<32 || byte2>126) {
  65.                         str = str ".";
  66.                     } else {
  67.                         str = str sprintf("%c",0+byte2);
  68.                     }
  69.                 }
  70.             }
  71.             if (i==4) {
  72.                 printf("  ");
  73.             }
  74.         }
  75.         for (; i<=8; i++) {
  76.             if (i==4) {
  77.                 printf("  ");
  78.             }
  79.             printf("      ");
  80.         }
  81.         printf("   %sn",str);
  82.     } else {
  83.         printf("%sn",$0);
  84.         headerleft = 40;
  85.     }
  86. }