SMBFormatter.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package de.tudarmstadt.informatik.hostage.format;
  2. import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
  3. /**
  4. * SMB log view formatter.
  5. * @author Wulf Pfeiffer
  6. */
  7. public class SMBFormatter implements ProtocolFormatter {
  8. public String format(String packet) {
  9. byte[] bytes = HelperUtils.hexStringToBytes(packet);
  10. byte cmd = bytes[8]; //command code located at 8
  11. StringBuffer buffer = new StringBuffer();
  12. buffer.append("Command: ");
  13. buffer.append(getCommandString(cmd));
  14. buffer.append("\n");
  15. buffer.append("Content: ");
  16. buffer.append(getContent(cmd, bytes));
  17. return buffer.toString();
  18. }
  19. /**
  20. * Checks command code for its command code and returns the name of this command.
  21. * @param command as byte.
  22. * @return command name as String.
  23. */
  24. private String getCommandString(byte command) {
  25. switch(command) {
  26. case 0x00: return "SMB_COM_CREATE_DIRECTORY";
  27. case 0x01: return "SMB_COM_DELETE_DIRECTORY";
  28. case 0x02: return "SMB_COM_OPEN";
  29. case 0x03: return "SMB_COM_CREATE";
  30. case 0x04: return "SMB_COM_CLOSE";
  31. case 0x05: return "SMB_COM_FLUSH";
  32. case 0x06: return "SMB_COM_DELETE";
  33. case 0x07: return "SMB_COM_RENAME";
  34. case 0x08: return "SMB_COM_QUERY_INFORMATION";
  35. case 0x09: return "SMB_COM_SET_INFORMATION";
  36. case 0x0A: return "SMB_COM_READ";
  37. case 0x0B: return "SMB_COM_WRITE";
  38. case 0x0C: return "SMB_COM_LOCK_BYTE_RANGE";
  39. case 0x0D: return "SMB_COM_UNLOCK_BYTE_RANGE";
  40. case 0x0E: return "SMB_COM_CREATE_TEMPORARY";
  41. case 0x0F: return "SMB_COM_CREATE_NEW";
  42. case 0x10: return "SMB_COM_CHECK_DIRECTORY";
  43. case 0x11: return "SMB_COM_PROCESS_EXIT";
  44. case 0x12: return "SMB_COM_SEEK";
  45. case 0x13: return "SMB_COM_LOCK_AND_READ";
  46. case 0x14: return "SMB_COM_WRITE_AND_UNLOCK";
  47. case 0x1A: return "SMB_COM_READ_RAW";
  48. case 0x1B: return "SMB_COM_READ_MPX";
  49. case 0x1C: return "SMB_COM_READ_MPX_SECONDARY";
  50. case 0x1D: return "SMB_COM_WRITE_RAW";
  51. case 0x1E: return "SMB_COM_WRITE_MPX";
  52. case 0x1F: return "SMB_COM_WRITE_MPX_SECONDARY";
  53. case 0x20: return "SMB_COM_WRITE_COMPLETE";
  54. case 0x21: return "SMB_COM_QUERY_SERVER";
  55. case 0x22: return "SMB_COM_SET_INFORMATION2";
  56. case 0x23: return "SMB_COM_QUERY_INFORMATION2";
  57. case 0x24: return "SMB_COM_LOCKING_ANDX";
  58. case 0x25: return "SMB_COM_TRANSACTION";
  59. case 0x26: return "SMB_COM_TRANSACTION_SECONDARY";
  60. case 0x27: return "SMB_COM_IOCTL";
  61. case 0x28: return "SMB_COM_IOCTL_SECONDARY";
  62. case 0x29: return "SMB_COM_COPY";
  63. case 0x2A: return "SMB_COM_MOVE";
  64. case 0x2B: return "SMB_COM_ECHO";
  65. case 0x2C: return "SMB_COM_WRITE_AND_CLOSE";
  66. case 0x2D: return "SMB_COM_OPEN_ANDX";
  67. case 0x2E: return "SMB_COM_READ_ANDX";
  68. case 0x2F: return "SMB_COM_WRITE_ANDX";
  69. case 0x30: return "SMB_COM_NEW_FILE_SIZE";
  70. case 0x31: return "SMB_COM_CLOSE_AND_TREE_DISC";
  71. case 0x32: return "SMB_COM_TRANSACTION2";
  72. case 0x33: return "SMB_COM_TRANSACTION2_SECONDARY";
  73. case 0x34: return "SMB_COM_FIND_CLOSE2";
  74. case 0x35: return "SMB_COM_FIND_NOTIFY_CLOSE";
  75. case 0x70: return "SMB_COM_TREE_CONNECT";
  76. case 0x71: return "SMB_COM_TREE_DISCONNECT";
  77. case 0x72: return "SMB_COM_NEGOTIATE";
  78. case 0x73: return "SMB_COM_SESSION_SETUP_ANDX";
  79. case 0x74: return "SMB_COM_LOGOFF_ANDX";
  80. case 0x75: return "SMB_COM_TREE_CONNECT_ANDX";
  81. case (byte)0x80: return "SMB_COM_QUERY_INFORMATION_DISK";
  82. case (byte)0x81: return "SMB_COM_SEARCH";
  83. case (byte)0x82: return "SMB_COM_FIND";
  84. case (byte)0x83: return "SMB_COM_FIND_UNIQUE";
  85. case (byte)0x84: return "SMB_COM_FIND_CLOSE";
  86. case (byte)0xA0: return "SMB_COM_NT_TRANSACT";
  87. case (byte)0xA1: return "SMB_COM_NT_TRANSACT_SECONDARY";
  88. case (byte)0xA2: return "SMB_COM_NT_CREATE_ANDX";
  89. case (byte)0xA4: return "SMB_COM_NT_CANCEL";
  90. case (byte)0xA5: return "SMB_COM_NT_RENAME";
  91. case (byte)0xC0: return "SMB_COM_OPEN_PRINT_FILE";
  92. case (byte)0xC1: return "SMB_COM_WRITE_PRINT_FILE";
  93. case (byte)0xC2: return "SMB_COM_CLOSE_PRINT_FILE";
  94. case (byte)0xC3: return "SMB_COM_GET_PRINT_QUEUE";
  95. case (byte)0xD8: return "SMB_COM_READ_BULK";
  96. case (byte)0xD9: return "SMB_COM_WRITE_BULK";
  97. case (byte)0xDA: return "SMB_COM_WRITE_BULK_DATA";
  98. case (byte)0xFF: return "SMB_COM_NONE";
  99. default: return "Unknown Command";
  100. }
  101. }
  102. /**
  103. * Returns the content of a packet as a String value, depending on its command code
  104. * @param command of the packet.
  105. * @param packet content as byte array.
  106. * @return content as a String.
  107. */
  108. private String getContent(byte command, byte[] packet) {
  109. switch(command) {
  110. case 0x72: return get0x72content(packet);
  111. case 0x73: return HelperUtils.byteToStr(packet);
  112. case (byte) 0xa2: return HelperUtils.byteToStr(packet);
  113. case 0x25: return HelperUtils.byteToStr(packet);
  114. default: return "";
  115. }
  116. }
  117. /**
  118. * Returns the content of a packet with command code 0x72.
  119. * @param packet content as byte array.
  120. * @return content as String.
  121. */
  122. private String get0x72content(byte[] packet) {
  123. byte[] content = new byte[packet.length-39];
  124. System.arraycopy(packet, 39, content, 0, content.length);
  125. return HelperUtils.byteToStr(content);
  126. }
  127. }