NBSS.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package de.tudarmstadt.informatik.hostage.protocol.smbutils;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;
  7. import java.util.List;
  8. import de.tudarmstadt.informatik.hostage.nio.Reader;
  9. import de.tudarmstadt.informatik.hostage.nio.Writer;
  10. import de.tudarmstadt.informatik.hostage.protocol.Protocol.TALK_FIRST;
  11. import de.tudarmstadt.informatik.hostage.protocol.SMB;
  12. import de.tudarmstadt.informatik.hostage.wrapper.Packet;
  13. /**
  14. * NetBIOS Session Service.
  15. * @author Wulf Pfeiffer
  16. */
  17. public class NBSS extends Thread {
  18. private int nbssPort;
  19. private ServerSocket nbssServer;
  20. private Socket nbssSocket;
  21. private Reader reader;
  22. private Writer writer;
  23. private SMB smb;
  24. @Override
  25. public void run() {
  26. try {
  27. nbssPort = 139;
  28. nbssServer = new ServerSocket(nbssPort);
  29. nbssSocket = nbssServer.accept();
  30. smb = new SMB();
  31. talkToClient(nbssSocket.getInputStream(), nbssSocket.getOutputStream());
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. /**
  37. * Used for communicating with a client.
  38. * @param in
  39. * @param out
  40. * @throws IOException
  41. */
  42. private void talkToClient(InputStream in, OutputStream out) throws IOException {
  43. reader = new Reader(in, smb.toString());
  44. writer = new Writer(out);
  45. Packet inputLine;
  46. List<Packet> outputLine;
  47. if (smb.whoTalksFirst() == TALK_FIRST.SERVER) {
  48. outputLine = smb.processMessage(null);
  49. writer.write(outputLine);
  50. }
  51. while (!isInterrupted() && (inputLine = reader.read()) != null) {
  52. outputLine = smb.processMessage(inputLine);
  53. if (outputLine != null) {
  54. writer.write(outputLine);
  55. }
  56. if (smb.isClosed()) {
  57. break;
  58. }
  59. }
  60. }
  61. }