NMB.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package de.tudarmstadt.informatik.hostage.protocol.smbutils;
  2. import java.io.IOException;
  3. import java.net.DatagramPacket;
  4. import java.net.DatagramSocket;
  5. import java.net.InetAddress;
  6. import java.net.UnknownHostException;
  7. import de.tudarmstadt.informatik.hostage.net.MyDatagramSocketFactory;
  8. public class NMB extends Thread {
  9. private DatagramSocket nbnsSocket;
  10. private DatagramSocket nbdsSocket;
  11. private DatagramPacket packet;
  12. private String ip;
  13. private String[] ipParts;
  14. private InetAddress dst;
  15. private int nbnsPort = 137;
  16. private int nbdsPort = 138;
  17. private String username;
  18. private String workgroup;
  19. public NMB(String ip, String username, String workgroup) {
  20. try {
  21. this.username = username;
  22. this.workgroup = workgroup;
  23. this.ip = ip;
  24. ipParts = ip.split("\\.");
  25. String newHostAddr = ipParts[0] + "." + ipParts[1] + "." + ipParts[2] + ".255";
  26. dst = InetAddress.getByName(newHostAddr);
  27. nbnsSocket = new MyDatagramSocketFactory().createDatagramSocket(nbnsPort);
  28. nbnsSocket.connect(dst, nbnsPort);
  29. nbdsSocket = new MyDatagramSocketFactory().createDatagramSocket(nbdsPort);
  30. nbnsSocket.connect(dst, nbdsPort);
  31. } catch (UnknownHostException e) {
  32. e.printStackTrace();
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. private void sendPacket(NBNS nbns) {
  38. try {
  39. byte[] packetBytes = nbns.getNextPacket();
  40. packet = new DatagramPacket(packetBytes, packetBytes.length, dst, nbnsPort);
  41. nbnsSocket.send(packet);
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. private void sendPacket(NBDS nbds) {
  47. try {
  48. byte[] packetBytes = nbds.getBytes();
  49. packet = new DatagramPacket(packetBytes, packetBytes.length, dst, nbdsPort);
  50. nbnsSocket.send(packet);
  51. } catch (IOException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. private void registrate() {
  56. NBNS nbns = new NBNS(new byte[]{0x50, 0x00}, Type.REGISTRATION_UNIQUE, Service.SERVER, username, ip);
  57. sendPacket(nbns);
  58. nbns.setService(Service.MESSENGER);
  59. sendPacket(nbns);
  60. nbns.setService(Service.WORKSTATION);
  61. sendPacket(nbns);
  62. nbns.setName(workgroup);
  63. nbns.setType(Type.REGISTRATION_GROUP);
  64. sendPacket(nbns);
  65. nbns.setService(Service.BROWSER_ELECTION);
  66. sendPacket(nbns);
  67. NBDS nbds = new NBDS(new byte[]{0x50, 0x06}, nbns.getAndIncrementTransactID(), nbns.getAddr(), username, workgroup);
  68. sendPacket(nbds);
  69. nbns.setType(Type.NAME_QUERY);
  70. nbns.setService(Service.LOCAL_MASTER_BROWSER);
  71. sendPacket(nbns);
  72. }
  73. public void run() {
  74. registrate();
  75. nbnsSocket.close();
  76. nbdsSocket.close();
  77. }
  78. }