package de.tudarmstadt.informatik.hostage.protocol.SMBUtils; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.UnknownHostException; public class NMB extends Thread { public static void main(String[] args) { NMB nbns = new NMB("192.168.178.104", "ABCDEFG", "WORKGROUP"); nbns.start(); } private DatagramSocket nbnsSocket; private DatagramSocket nbdsSocket; private DatagramPacket packet; private String ip; private String[] ipParts; private InetAddress dst; private int nbnsPort = 137; private int nbdsPort = 138; private String username; private String workgroup; public NMB(String ip, String username, String workgroup) { super(); try { this.username = username; this.workgroup = workgroup; nbnsSocket = new DatagramSocket(nbnsPort); nbdsSocket = new DatagramSocket(nbdsPort); this.ip = ip; ipParts = ip.split("\\."); String newHostAddr = ipParts[0] + "." + ipParts[1] + "." + ipParts[2] + ".255"; dst = InetAddress.getByName(newHostAddr); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private void sendPacket(NBNS nbns) { try { byte[] packetBytes = nbns.getNextPacket(); packet = new DatagramPacket(packetBytes, packetBytes.length, dst, nbnsPort); nbnsSocket.send(packet); } catch (IOException e) { e.printStackTrace(); } } private void sendPacket(NBDS nbds) { try { byte[] packetBytes = nbds.getBytes(); packet = new DatagramPacket(packetBytes, packetBytes.length, dst, nbdsPort); nbnsSocket.send(packet); } catch (IOException e) { e.printStackTrace(); } } private void registrate() { NBNS nbns = new NBNS(new byte[]{0x50, 0x00}, Type.REGISTRATION_UNIQUE, Service.SERVER, username, ip); sendPacket(nbns); nbns.setService(Service.MESSENGER); sendPacket(nbns); nbns.setService(Service.WORKSTATION); sendPacket(nbns); nbns.setName(workgroup); nbns.setType(Type.REGISTRATION_GROUP); sendPacket(nbns); nbns.setService(Service.BROWSER_ELECTION); sendPacket(nbns); NBDS nbds = new NBDS(new byte[]{0x50, 0x06}, nbns.getAndIncrementTransactID(), nbns.getAddr(), username, workgroup); sendPacket(nbds); nbns.setType(Type.NAME_QUERY); nbns.setService(Service.LOCAL_MASTER_BROWSER); sendPacket(nbns); } public void run() { registrate(); nbnsSocket.close(); nbdsSocket.close(); } }