TELNETFormatter.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package de.tudarmstadt.informatik.hostage.format;
  2. import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
  3. /**
  4. * Telnet log view formatter.
  5. *
  6. * @author Wulf Pfeiffer
  7. */
  8. public class TELNETFormatter implements ProtocolFormatter {
  9. public String format(String packet) {
  10. byte[] bytes = HelperUtils.hexStringToBytes(packet);
  11. String options = "Options:\n" + checkForOptions(bytes) + "\n";
  12. String content = "Content: " + HelperUtils.byteToStr(bytes);
  13. return options + content;
  14. }
  15. /**
  16. * Checks a packet for option commands and returns their names as Strings.
  17. *
  18. * @param bytes
  19. * that are checked.
  20. * @return names of the option commands as String.
  21. */
  22. private String checkForOptions(byte[] bytes) {
  23. StringBuffer options = new StringBuffer();
  24. for (int i = 0; i < bytes.length; i++) {
  25. if (bytes[i] == (byte) 0xff && i + 2 < bytes.length) {
  26. switch (bytes[i + 1]) {
  27. case (byte) 0xfb:
  28. options.append(" WILL ");
  29. break;
  30. case (byte) 0xfc:
  31. options.append(" WON'T ");
  32. break;
  33. case (byte) 0xfd:
  34. options.append(" DO ");
  35. break;
  36. case (byte) 0xfe:
  37. options.append(" DON'T ");
  38. break;
  39. default:
  40. options.append(" unkown command ");
  41. break;
  42. }
  43. // option name
  44. switch (bytes[i + 2]) {
  45. case 0x00:
  46. options.append("Binary Transmission\n");
  47. break;
  48. case 0x01:
  49. options.append("Echo\n");
  50. break;
  51. case 0x02:
  52. options.append("Reconnection\n");
  53. break;
  54. case 0x03:
  55. options.append("Suppress Go Ahead\n");
  56. break;
  57. case 0x04:
  58. options.append("Approx Message Size Negotiation\n");
  59. break;
  60. case 0x05:
  61. options.append("Status\n");
  62. break;
  63. case 0x06:
  64. options.append("Timing Mark\n");
  65. break;
  66. case 0x07:
  67. options.append("Remote Controlled Trans and Echo\n");
  68. break;
  69. case 0x08:
  70. options.append("Output Line Width\n");
  71. break;
  72. case 0x09:
  73. options.append("Output Page Size\n");
  74. break;
  75. case 0x0a:
  76. options.append("Output Carriage-Return Disposition\n");
  77. break;
  78. case 0x0b:
  79. options.append("Output Horizontal Tab Stops\n");
  80. break;
  81. case 0x0c:
  82. options.append("Output Horizontal Tab Disposition\n");
  83. break;
  84. case 0x0d:
  85. options.append("Output Formfeed Disposition\n");
  86. break;
  87. case 0x0e:
  88. options.append("Output Vertical Tabstops\n");
  89. break;
  90. case 0x0f:
  91. options.append("Output Vertical Tab Disposition\n");
  92. break;
  93. case 0x10:
  94. options.append("Output Linefeed Disposition\n");
  95. break;
  96. case 0x11:
  97. options.append("Extended ASCII\n");
  98. break;
  99. case 0x12:
  100. options.append("Logout\n");
  101. break;
  102. case 0x13:
  103. options.append("Byte Macro\n");
  104. break;
  105. case 0x14:
  106. options.append("Data Entry Terminal\n");
  107. break;
  108. case 0x15:
  109. options.append("SUPDUP\n");
  110. break;
  111. case 0x16:
  112. options.append("SUPDUP Output\n");
  113. break;
  114. case 0x17:
  115. options.append("Send Location\n");
  116. break;
  117. case 0x18:
  118. options.append("Terminal Type\n");
  119. break;
  120. case 0x19:
  121. options.append("End of Record\n");
  122. break;
  123. case 0x1a:
  124. options.append("TACACS User Identification\n");
  125. break;
  126. case 0x1b:
  127. options.append("Output Marking\n");
  128. break;
  129. case 0x1c:
  130. options.append("Terminal Location Number\n");
  131. break;
  132. case 0x1d:
  133. options.append("Telnet 3270 Regime\n");
  134. break;
  135. case 0x1e:
  136. options.append("X.3 PAD\n");
  137. break;
  138. case 0x1f:
  139. options.append("Negotiate About Window Size\n");
  140. break;
  141. case 0x20:
  142. options.append("Terminal Speed\n");
  143. break;
  144. case 0x21:
  145. options.append("Remote Flow Control\n");
  146. break;
  147. case 0x22:
  148. options.append("Linemode\n");
  149. break;
  150. case 0x23:
  151. options.append("X Display Location\n");
  152. break;
  153. case (byte) 0xff:
  154. options.append("Extended-Options-List\n");
  155. break;
  156. default:
  157. options.append("unknown option\n");
  158. break;
  159. }
  160. }
  161. }
  162. return options.toString();
  163. }
  164. }