NBSS.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. public NBSS() {
  26. nbssPort = 139;
  27. MyServerSocketFactory factory = new MyServerSocketFactory();
  28. try {
  29. nbssServer = factory.createServerSocket(nbssPort);
  30. } catch (IOException e) {
  31. e.printStackTrace();
  32. }
  33. }
  34. @Override
  35. public void run() {
  36. try {
  37. nbssSocket = nbssServer.accept();
  38. smb = new SMB();
  39. talkToClient(nbssSocket.getInputStream(), nbssSocket.getOutputStream());
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43. }
  44. /**
  45. * Used for communicating with a client.
  46. * @param in
  47. * @param out
  48. * @throws IOException
  49. */
  50. private void talkToClient(InputStream in, OutputStream out) throws IOException {
  51. reader = new Reader(in, smb.toString());
  52. writer = new Writer(out);
  53. Packet inputLine;
  54. List<Packet> outputLine;
  55. if (smb.whoTalksFirst() == TALK_FIRST.SERVER) {
  56. outputLine = smb.processMessage(null);
  57. writer.write(outputLine);
  58. }
  59. while (!isInterrupted() && (inputLine = reader.read()) != null) {
  60. outputLine = smb.processMessage(inputLine);
  61. if (outputLine != null) {
  62. writer.write(outputLine);
  63. }
  64. if (smb.isClosed()) {
  65. break;
  66. }
  67. }
  68. }
  69. }