NMB.java 2.4 KB

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