NBSS.java 1.8 KB

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