SMB.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. package de.tudarmstadt.informatik.hostage.logging.formatter.protocol;
  2. import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
  3. /**
  4. * SMB log view formatter.
  5. *
  6. * @author Wulf Pfeiffer
  7. */
  8. public class SMB extends ProtocolFormatter {
  9. @Override
  10. public String format(String packet) {
  11. byte[] bytes = HelperUtils.hexStringToBytes(packet);
  12. byte cmd = bytes[8]; // command code located at 8
  13. StringBuffer buffer = new StringBuffer();
  14. buffer.append("Command: ");
  15. buffer.append(getCommandString(cmd));
  16. buffer.append("\n");
  17. buffer.append("Content: ");
  18. buffer.append(getContent(cmd, bytes));
  19. return buffer.toString();
  20. }
  21. /**
  22. * Returns the content of a packet with command code 0x72.
  23. *
  24. * @param packet
  25. * content as byte array.
  26. * @return content as String.
  27. */
  28. private String get0x72content(byte[] packet) {
  29. byte[] content = new byte[packet.length - 39];
  30. System.arraycopy(packet, 39, content, 0, content.length);
  31. return HelperUtils.byteToStr(content);
  32. }
  33. /**
  34. * Checks command code for its command code and returns the name of this
  35. * command.
  36. *
  37. * @param command
  38. * as byte.
  39. * @return command name as String.
  40. */
  41. private String getCommandString(byte command) {
  42. switch (command) {
  43. case 0x00:
  44. return "SMB_COM_CREATE_DIRECTORY";
  45. case 0x01:
  46. return "SMB_COM_DELETE_DIRECTORY";
  47. case 0x02:
  48. return "SMB_COM_OPEN";
  49. case 0x03:
  50. return "SMB_COM_CREATE";
  51. case 0x04:
  52. return "SMB_COM_CLOSE";
  53. case 0x05:
  54. return "SMB_COM_FLUSH";
  55. case 0x06:
  56. return "SMB_COM_DELETE";
  57. case 0x07:
  58. return "SMB_COM_RENAME";
  59. case 0x08:
  60. return "SMB_COM_QUERY_INFORMATION";
  61. case 0x09:
  62. return "SMB_COM_SET_INFORMATION";
  63. case 0x0A:
  64. return "SMB_COM_READ";
  65. case 0x0B:
  66. return "SMB_COM_WRITE";
  67. case 0x0C:
  68. return "SMB_COM_LOCK_BYTE_RANGE";
  69. case 0x0D:
  70. return "SMB_COM_UNLOCK_BYTE_RANGE";
  71. case 0x0E:
  72. return "SMB_COM_CREATE_TEMPORARY";
  73. case 0x0F:
  74. return "SMB_COM_CREATE_NEW";
  75. case 0x10:
  76. return "SMB_COM_CHECK_DIRECTORY";
  77. case 0x11:
  78. return "SMB_COM_PROCESS_EXIT";
  79. case 0x12:
  80. return "SMB_COM_SEEK";
  81. case 0x13:
  82. return "SMB_COM_LOCK_AND_READ";
  83. case 0x14:
  84. return "SMB_COM_WRITE_AND_UNLOCK";
  85. case 0x1A:
  86. return "SMB_COM_READ_RAW";
  87. case 0x1B:
  88. return "SMB_COM_READ_MPX";
  89. case 0x1C:
  90. return "SMB_COM_READ_MPX_SECONDARY";
  91. case 0x1D:
  92. return "SMB_COM_WRITE_RAW";
  93. case 0x1E:
  94. return "SMB_COM_WRITE_MPX";
  95. case 0x1F:
  96. return "SMB_COM_WRITE_MPX_SECONDARY";
  97. case 0x20:
  98. return "SMB_COM_WRITE_COMPLETE";
  99. case 0x21:
  100. return "SMB_COM_QUERY_SERVER";
  101. case 0x22:
  102. return "SMB_COM_SET_INFORMATION2";
  103. case 0x23:
  104. return "SMB_COM_QUERY_INFORMATION2";
  105. case 0x24:
  106. return "SMB_COM_LOCKING_ANDX";
  107. case 0x25:
  108. return "SMB_COM_TRANSACTION";
  109. case 0x26:
  110. return "SMB_COM_TRANSACTION_SECONDARY";
  111. case 0x27:
  112. return "SMB_COM_IOCTL";
  113. case 0x28:
  114. return "SMB_COM_IOCTL_SECONDARY";
  115. case 0x29:
  116. return "SMB_COM_COPY";
  117. case 0x2A:
  118. return "SMB_COM_MOVE";
  119. case 0x2B:
  120. return "SMB_COM_ECHO";
  121. case 0x2C:
  122. return "SMB_COM_WRITE_AND_CLOSE";
  123. case 0x2D:
  124. return "SMB_COM_OPEN_ANDX";
  125. case 0x2E:
  126. return "SMB_COM_READ_ANDX";
  127. case 0x2F:
  128. return "SMB_COM_WRITE_ANDX";
  129. case 0x30:
  130. return "SMB_COM_NEW_FILE_SIZE";
  131. case 0x31:
  132. return "SMB_COM_CLOSE_AND_TREE_DISC";
  133. case 0x32:
  134. return "SMB_COM_TRANSACTION2";
  135. case 0x33:
  136. return "SMB_COM_TRANSACTION2_SECONDARY";
  137. case 0x34:
  138. return "SMB_COM_FIND_CLOSE2";
  139. case 0x35:
  140. return "SMB_COM_FIND_NOTIFY_CLOSE";
  141. case 0x70:
  142. return "SMB_COM_TREE_CONNECT";
  143. case 0x71:
  144. return "SMB_COM_TREE_DISCONNECT";
  145. case 0x72:
  146. return "SMB_COM_NEGOTIATE";
  147. case 0x73:
  148. return "SMB_COM_SESSION_SETUP_ANDX";
  149. case 0x74:
  150. return "SMB_COM_LOGOFF_ANDX";
  151. case 0x75:
  152. return "SMB_COM_TREE_CONNECT_ANDX";
  153. case (byte) 0x80:
  154. return "SMB_COM_QUERY_INFORMATION_DISK";
  155. case (byte) 0x81:
  156. return "SMB_COM_SEARCH";
  157. case (byte) 0x82:
  158. return "SMB_COM_FIND";
  159. case (byte) 0x83:
  160. return "SMB_COM_FIND_UNIQUE";
  161. case (byte) 0x84:
  162. return "SMB_COM_FIND_CLOSE";
  163. case (byte) 0xA0:
  164. return "SMB_COM_NT_TRANSACT";
  165. case (byte) 0xA1:
  166. return "SMB_COM_NT_TRANSACT_SECONDARY";
  167. case (byte) 0xA2:
  168. return "SMB_COM_NT_CREATE_ANDX";
  169. case (byte) 0xA4:
  170. return "SMB_COM_NT_CANCEL";
  171. case (byte) 0xA5:
  172. return "SMB_COM_NT_RENAME";
  173. case (byte) 0xC0:
  174. return "SMB_COM_OPEN_PRINT_FILE";
  175. case (byte) 0xC1:
  176. return "SMB_COM_WRITE_PRINT_FILE";
  177. case (byte) 0xC2:
  178. return "SMB_COM_CLOSE_PRINT_FILE";
  179. case (byte) 0xC3:
  180. return "SMB_COM_GET_PRINT_QUEUE";
  181. case (byte) 0xD8:
  182. return "SMB_COM_READ_BULK";
  183. case (byte) 0xD9:
  184. return "SMB_COM_WRITE_BULK";
  185. case (byte) 0xDA:
  186. return "SMB_COM_WRITE_BULK_DATA";
  187. case (byte) 0xFF:
  188. return "SMB_COM_NONE";
  189. default:
  190. return "Unknown Command";
  191. }
  192. }
  193. /**
  194. * Returns the content of a packet as a String value, depending on its
  195. * command code
  196. *
  197. * @param command
  198. * of the packet.
  199. * @param packet
  200. * content as byte array.
  201. * @return content as a String.
  202. */
  203. private String getContent(byte command, byte[] packet) {
  204. switch (command) {
  205. case 0x72:
  206. return get0x72content(packet);
  207. case 0x73:
  208. return HelperUtils.byteToStr(packet);
  209. case (byte) 0xa2:
  210. return HelperUtils.byteToStr(packet);
  211. case 0x25:
  212. return HelperUtils.byteToStr(packet);
  213. default:
  214. return "";
  215. }
  216. }
  217. }