[dúvida] Solicitação via TCP/IP

Ola amigos, tenho um problema na minha empresa…
A internet aqui é bloqueada para a maioria dos funcionarios, porém quando eles precisam eles pedem para que eu libere!
Então uso um comando via CMD para adicionar uma nova rota que direciona à internet.
O problema é que a empresa é grande e as vezes estou com outros problemas e não posso ir até a pessoa.
Então pensei em fazer uma aplicação que seria instalada em cada maquina e quando alguem precisasse fizesse uma solicitação e que a minha maquina recebesse essa solicitação. Depois eu simplesmente autorizava, com essa autorização chamava um método que adicionaria a rota sem o usuario da máquina ver o que eu estou digitando no CMD.
O problema é… sou iniciante em Java nunca fiz uma aplicação robusta assim (se é que é robusta), mas para mim parece complicada.
Queria uma luz de como começar a fazer isso.

Alguem poderia me ajudar e me indicar classes, material de estudos para isso, como tratar conexoes TCP/IP via java e coisas mais que eu preciso para fazer essa aplicação?

Agradeço à todos

Oi, boa tarde, tudo bem?

Então, entendi seu problema e percebi que voce esta interessado em aprender java, mas acredito que seja um projeto um pouco dificil pra iniciante como nos :slight_smile: De qualquer forma, sera que mandar um email com um assunto padrao como “Liberar internet” para voce nao era a solucao mais pratica? Ou nem email interno a galera tem acesso?

Abracos e boa sorte.

não é mais facil liberar a internet e bloquiar certos sites?
como por exemplo o GUJ (to brincando…)

heuehuheahe
sabe o que acontece, a empresa é grande… como é via CMD tem que ser feito na maquina de cada usuario.
eu trabalho no 6º andar, as vezes o pessoal do 1º andar me pede isso…
ai fica meio complicado dependendo da minha quota de serviço ir até a maquina do cara
por isso queria simplificar =/

ueh… mas todas as maquinas estao em rede??

pq se estiverem… vc pode executa comandos de prompt na outra maquina…

ai a pessoa te liga… vc envia o comando direto da sua maquina e libera lah na maquina dela…
ainda poderia fazer um programa q automaticamente envia o comando no prompt pra maquina da pessoa…

[quote=alucardeck]ueh… mas todas as maquinas estao em rede??

pq se estiverem… vc pode executa comandos de prompt na outra maquina…

ai a pessoa te liga… vc envia o comando direto da sua maquina e libera lah na maquina dela…
ainda poderia fazer um programa q automaticamente envia o comando no prompt pra maquina da pessoa…[/quote]

sim estão todas em Rede e no mesmo dominio.

Como eu poderia fazer isso? (se for permitido falar, não se é utilizando o Java)

entao… pelo metodo q eu conheço…

deve existir um login/senha padrão em todas maquinas q seria de administrador certo?

se fosse uma rede Linux seria facil de resolver pelo comando “ssh”

mas como eh windows… ou vc usa VNC ou Telnet…
o VNC vc iria acessar a maquina da pessoa e ela veria vc abrindo o prompt e digitando…

com o telnet… vc iria precisar configurar em cada maquina para o telnet liberar o acesso…
e por comandos de prompt vc poderia acessar o comando q vc desejar no prompt do “alvo”
(ou seja, o Java poderia automatizar os comandos “telnet maquina/servidor/usuario/senha/comando” )

ah lembrei de outro metodo…

tem um programa chamado “psexec”

ele executa comandos remotamente…
mais info no site http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

comandos diretos do DOS q acessem outra maquina… soh lembro
shutdown
taskkill
schtasks*

*esse ultimo talvez funcionaria para oq vc quer fazer… mas ele iria rodar um arquivo .bat… q precisaria estar na maquina da pessoa… então é meio sem sentido vc esconder o proprio arquivo de liberação na maquina dela =P

Bom voltando ao titulo do tópico,

Bina0, vc quer fazer um programa do jeito que precisa, ou quer um pronto?

Se estiver afim de fazer, avisa que eu te dou uns toques…
“pq não vou escrever muita coisa se vc não quiser fazer!”

Att
Ricoldi.

[quote=ricoldi]Bom voltando ao titulo do tópico,

Bina0, vc quer fazer um programa do jeito que precisa, ou quer um pronto?

Se estiver afim de fazer, avisa que eu te dou uns toques…
“pq não vou escrever muita coisa se vc não quiser fazer!”

Att
Ricoldi.[/quote]

Ola amigo!

primeiro de tudo obrigado pelas respostas!

alucardeck , por assistencia remota não adiantaria, pois o que eu quero mesmo é que o Funcionario não veja o que eu estou adicionando no prompt.
Por isso a idéia do programa.

Ricoldi, quero fazer o programa sim. Mesmo por que ja é uma boa pra treinar, estudar e aprender o Java cada vez mais
agradeceria de mais a sua ajuda

Vlww

edit:
Pessoal comecei a fazer aqui o projetinho… porém fiz no bloco de notas não sei se ta certo e também parei aqui pois não sei como continuar.
Segue fonte:

import javax.swing.*;

public class Methods {
    
	private String comandoNet = "route add 0.0.0.0 mask 0.0.0.0 15.0.1.60";
	private String comandoSap = "route add 0.0.0.0 mask 0.0.0.0 15.0.1.15";
	
	/**** Metodo "liberarNet": faz uma solicitação ao administrador de liberação de internet  ****/
	public void liberarNet(String comandoNet) {
	   
	   try {
	      Runtime.getRuntime().exec(comandoNet);
	   } catch (Exception e){
	      JOptionPane.showMessageDialog(null, "Erro, Contate o administrador");
	   } //end try / catch
	} //end method liberarNet
	/**** Metodo "liberarSap": faz uma solicitação ao administrador de uma nova rota para abrir um servidor teste no SAP ****/
	public void liberarSap(String comandoSap){
	  
	   try {
	     Runtime.getRuntime().exec(comandoSap);
	   } catch (Exception e){
	     JOptionPane.showMessageDialog(null, "Erro, Contate o administrador");
	   } //end try / catch
	} //end method liiberarSap
	
}//end class Methods
	
public class EnableMethods extends Methods {
    
	EnableMethods metodoN = new EnableMethods();
	metodoN.liberarNet();
	
	EnableMethods metodoS = new EnableMethods();
	metodoS.liberarSap();
    
	public EnableMethods(){
	     
		 
    }
	
}//end class EnableMethods

vlww

Seguinte Bina0,

Fiz um exemplinho básico de como a coisa funcionaria (pelo menos ao meu ver), creio que para ficar um programa legal e bem feitinho de uma estudada em interface Swing para fazer um programinha que rode no tray por exemplo e também leia sobre Sockets e Streams que são a chave para uma comunicação de rede.

Aqui mesmo no GUJ tem a área de artigos e tutoriais são muito bons
http://guj.com.br/artigos.jsp

Fiz um exemplo básico do que envia e do que processa dei uma comentada por cima, mas eles são auto-explicativos.

Abaixo o programa que envia comandos

import java.net.Socket;
import java.io.DataOutputStream;

public class Manager {

    public static void main(String[] args) {
     	  try{
	     	  //Abre uma conexão com o programa que vai executar o comando
	     	  Socket conex = new Socket( "127.0.0.1",8888);
	     	  
	     	  //Abre uma saida de dados
	     	  DataOutputStream saida = new DataOutputStream(conex.getOutputStream ());
	     	  
	     	  //Envia um comando para o programa executar
	     	  saida.writeUTF ("explorer");
	     	  
	     	  System.out.println ("Comando enviado!");
     	  }catch (Exception e){
     	  	  e.printStackTrace ();
     	  }
    }
}

Aqui o programa que executa os comandos

import java.net.ServerSocket;
import java.net.Socket;
import java.io.DataInputStream;

public class Process {

	/** Metodo que executa qualquer comando 
	 *  "Este metodo executa dentro de um thread para não parar o processamento"
	 *  @param _comando - String do comando a ser executado
	 *
	 **/
	public static void execComandoT(final String _comando){
		new Thread(){
			public void run(){
				try{
					System.out.println ("Comando>" + _comando);
					Runtime.getRuntime().exec(_comando);
				}catch (Exception e){
					e.printStackTrace ();
				}
			}
		}.start();
	}
	
	public static void main (String[] args){
		try{
			//Cria um server socket que fica escutando as conexões
			ServerSocket servlist = new ServerSocket(8888);
			
			Socket conex;
			DataInputStream entrada;
			String msg;
				
			while (!servlist.isClosed ()){
				try{
					System.out.println ("Aguardando...");
					
					//Fica aguardando conexões
					conex = servlist.accept ();
					
					//Cria um stream que vai receber o comando a ser executado
					entrada = new DataInputStream (conex.getInputStream ());
					
					//Recebe o comando
					msg = entrada.readUTF ();
					
					//Se não for vazio manda executar o que recebeu
					if (msg.length ()>0){
						execComandoT (msg);
					}
				}catch (Exception e){
					e.printStackTrace ();
				}
			}			
		}catch (Exception e){
			e.printStackTrace ();
		}
	}
	
		
}

Espero que isto te ajude… Fortemente gostaria que não se contentasse com isto, mas sim fizesse um bem feito e completinho…

Qualquer duvida posta ae…

Att
Ricoldi

nossa cara vlww mesmo…
vou pegar esse fim de semana e estudar isso em casa bunitinho e posto o resultado aqui na segunda.
tenho uma mini rede em casa com 3 pcs, creio que se funcionar em casa funcionara aqui também.
Obrigado mais uma vez a ajuda. Gostei muito desse forum sempre me ajudam e tem muitos tutoriais legais.

Até mais

Esse programinha que fiz, testei ele aqui e rodou de boa em 3 maquinas 2 como clientes e 1 como servidor. abri o explorer, o regedit, shutdown -s, shutdown -a, tudo tranquilo.

De uma estudada sim direitinho, peço para não pecar nos conceitos.

Eu tb adoro esse forum, rs… e ele é mesmo muito bom cheio de gente esperta que manja!

Vou querer ver esse seu código ae,

Abraços, Boa sorte
Att
Ricoldi