Scanner NetBios

E ai galera blz, tenho um dispositivo(Monitor ambiental) ligado a minha rede através de IP dinâmico, e para me conectar a ele, preciso inserir o IP manualmente, portanto, queria um algoritmo que fizesse uma busca na rede com NetBios do dispositivo por parâmetro. E se encontrado, capturar o IP, mascara e fazer uma conexão automática !! Alguém pode me ajudar Pfv ??

A rede é sua…é de empresa…como é a estrutura dessa rede? Existem maneiras de se fazer isso, porém elas podem fazer muito barulho na sua rede e atrapalhar no monitoramento de vulnerabilidades.

Opa boa tarde Villagram, então a rede é de uma empresa pequena, tem um servidor para a base de dados e no máximo 30 dispositivos ligados a ela !! Eu andei pesquisando e cheguei a conclusão que esse método abordado antes não vai funcionar, pois o dispositivo não possui HostName, e sim NetBios. Então preciso fazer uma busca para encontrar o nome NetBios do dispositivo. A biblioteca JCIFS tem bastante recursos para isso, só que ainda não consegui obter sucesso. Se puder me ajudar eu agradeço mt, vlw !!

Boa tarde amigo.

Tudo bem então, vou montar um algoritimo com netbios aqui e posto assim que terminar. Você sabe qual a identificação do dispositivo na rede ou o mac andress?

Identificação NetBios eu sei, O mac não !! Cara agradeço mt a ajuda, obrigado por enquanto !!

Boa noite @MatheusLemes
Para achar o DHCP (nome NetBIOS) das máquinas na LAN não é necessário nenhuma biblioteca adicional, deixo aqui um script para procurar até 100 nomes e ip’s internos na rede.

Este programa só vai entregar os nomes e ip’s na intranet, para lidar com os protocolos NetBIOS (smb, etc…) é necessário bastante trabalho com socket tcp, dai a preferencia ser a biblioteca jcifs, mas para listar os dispositivos, este programa é suficiente, adapte ao seu gosto.

public class Main
{
private static byte[] INTRANET_ADDRESS = {(byte) 192, (byte) 168, 1, 0};
private static final byte ADDRESS_RANGE = 100;

private static final String LINE_SEPARATOR;

static{
	LINE_SEPARATOR = System.lineSeparator();
}

private List<InetAddress> reachableAddresses;

public Main(){
	
	reachableAddresses = new ArrayList<InetAddress>();
	
	executeNetworkSearch();
}

private void executeNetworkSearch(){
	new Thread(new Runnable(){
		@Override
		public void run(){
			try{
				long startTime = System.currentTimeMillis();
				
				System.out.println("Searching local network..." + LINE_SEPARATOR);

				for(byte i = 2; i <= ADDRESS_RANGE; i++){
					INTRANET_ADDRESS[3] = i;
					InetAddress addr = InetAddress.getByAddress(INTRANET_ADDRESS);

					if(!addr.isReachable(100))continue;

					reachableAddresses.add(addr);
					
					System.out.println("DHCP: " + addr.getHostName());
					System.out.println("Local IP: " + addr.getHostAddress() + LINE_SEPARATOR);
				}

				System.out.println("Finish searching!" + LINE_SEPARATOR);
				
				System.out.printf("Found %d reachable intranet adresses!", reachableAddresses.size());
				System.out.println();
				
				long finishTime = System.currentTimeMillis();
				long timeSpan = (finishTime - startTime) / 1000;
				
				System.out.printf("Take %d seconds to search the intranet!", timeSpan);
				System.out.println();

			}catch(UnknownHostException e){
				//TODO: Handle Exceptions
			}catch(IOException e){
				//TODO: Handle Exceptions
			}
		}
	}).start();
}
}

public static void main(String[] args)
{
	new Main();
}
}