AbstractHandler.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package de.tudarmstadt.informatik.hostage.handler;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.Socket;
  6. import de.tudarmstadt.informatik.hostage.HoneyListener;
  7. import de.tudarmstadt.informatik.hostage.HoneyService;
  8. import de.tudarmstadt.informatik.hostage.logging.Logger;
  9. import de.tudarmstadt.informatik.hostage.logging.Record;
  10. import de.tudarmstadt.informatik.hostage.logging.Record.TYPE;
  11. import de.tudarmstadt.informatik.hostage.protocol.Protocol;
  12. public abstract class AbstractHandler implements Runnable {
  13. protected static final int TIMEOUT = 30 * 1000;
  14. protected Protocol protocol;
  15. private Socket client;
  16. protected Thread thread;
  17. private HoneyListener listener;
  18. protected Logger log;
  19. public AbstractHandler(HoneyService service, HoneyListener listener,
  20. Protocol protocol, Socket client) {
  21. this.listener = listener;
  22. this.log = service.getLog();
  23. this.protocol = protocol;
  24. this.client = client;
  25. this.thread = new Thread(this);
  26. setSoTimeout(client);
  27. thread.start();
  28. }
  29. private void setSoTimeout(Socket client) {
  30. try {
  31. client.setSoTimeout(TIMEOUT);
  32. } catch (Exception e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. @Override
  37. public void run() {
  38. InputStream in;
  39. OutputStream out;
  40. try {
  41. in = client.getInputStream();
  42. out = client.getOutputStream();
  43. talkToClient(in, out);
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. kill();
  48. }
  49. public void kill() {
  50. thread.interrupt();
  51. try {
  52. client.close();
  53. } catch (Exception e) {
  54. e.printStackTrace();
  55. }
  56. listener.refreshHandlers();
  57. }
  58. public boolean isTerminated() {
  59. return thread.isInterrupted();
  60. }
  61. abstract protected void talkToClient(InputStream in, OutputStream out)
  62. throws IOException;
  63. protected Record createRecord(TYPE type, String packet) {
  64. Record record = new Record();
  65. record.setType(type);
  66. record.setTimestamp(System.currentTimeMillis());
  67. record.setLocalIP(client.getLocalAddress());
  68. record.setLocalPort(protocol.getPort());
  69. record.setRemoteIP(client.getInetAddress());
  70. record.setRemotePort(client.getPort());
  71. record.setPacket(packet);
  72. return record;
  73. }
  74. }