Home

Proxytel - Universidade de Coimbra

image

Contents

1. tempo 3 date getHours tempo 4 date getMinutes tempo 5 date getSeconds return tempo Proxytel C digo fonte xvi Escreve uma cadeia de caracteres para a socket param s a string a escrever E private void writeChars String s try out write s 0 s length out flush catch IOException e System err printin IO Exception Escreve um caractere para a socket param c o caractere a escrever private void writeChar char c try out write c out flush catch IOException e System err println IO Exception Verifica se o comando introduzido faz parte da lista de comandos disponiveis param cwdz comando return a posicao do comando introduzido no array de comandos private int indexOf String cwdz int i 0 while i lt cwd length amp amp cwdz equals cwd i i t return i Proxytel C digo fonte
2. param out o Stream do cliente para o qual deve ser enviada a lista E public void list_users BufferedWriter out String s try Enumeration enum hash keys percorre a Hashtable while enum hasMoreElements s String enum nextElement n r out write s 0 s length out flush catch IOException e System err printin IO Exception Verifica se um determinado utilizador faz parte da lista de utilizadores autorizados param login o login do utilizador param password a password do utilizador x public synchronized boolean identifica_user String login String password sha reset vai buscar a password da Hashtable correspondendo a este utilizador byte pass read byte hash get login encripta a password passada como par metro para a poder comparar com a password ja encriptada existente na Hashtable sha update password getBytes j byte encrypt sha digest if pass_read null comparaPass pass read encrypt return false ret rn Crue Compara duas passwords encriptadas param passl param pass2 return true se as passwords coincidem return false caso contr rio E F public boolean comparaPass byte passl byte pass2 pa if passl length pass2 length return false for int i 0 i lt passl length i if passl i pass2 i return false
3. return true Altera a password de um utilizador Remove o utilizador e volta a cri lo mas agora com uma nova password param login o login do utilizador param passl a password antiga param pass2 a password nova return true se o foi alterada a password do utilizador com sucesso return false caso contr rio Rj public synchronized boolean alteraPass String login String passl String pass2 Proxytel C digo fonte Object obj verifica se ja exist sse utilizador obj hash get login if obj null identifica_user login passl return false delete user login create user login pass2 guarda as altera es files saveUtilizadores return true Adiciona uma nova maquina remota autorizada como destino das liga es param remote a maquina remota return true se foi adicionada a nova maquina destino com sucesso return false caso contr rio EA public boolean add remote String remote try InetAddress host InetAddress getByName remote int index remotes indexOf host if index 1 return false remotes addElement host guarda as altera es files saveRemotos return Crue catch java net UnknownHostException e return false Remove uma m quina remota autorizada como destino das liga es param remote a m quina remota return true se foi removida a m quina destino com sucesso
4. Escrita de um Vector de m quinas remotas autorizadas para o ficheiro remotos aut EA public void saveRemotos try FileOutputStream dataFile new FileOutputStream remotos aut ObjectOutputStream file out new ObjectOutputStream dataFile file_out writeObject admin getRemotes file_out close catch Exception e System out printlin Erro na escrita do ficheiro remotos aut e Leitura de um Vector de m quinas autorizadas a efectuar liga o ao Proxytel do ficheiro clientes aut public void readClientes Proxytel C digo fonte try File f new Fil if f exists FileInputStream dataFile clientes aut new FileInputStream clientes aut ObjectInputStream file_in new ObjectInputStream dataFile Vector clients Vector file_in readObject admin setClients clients file in close else System out printin O ficheiro clientes aut n o existe como o ficheiro n o existe ssencial adicionar como cliente a pr pria m quina onde se encontra a correr o servidor Proxytel admin add client 127 0 0 1 catch Exception e System out printlin Erro na leitura do ficheiro clientes aut e Escrita de um Vector de m quinas autorizadas a efectuar liga o ao Proxytel no ficheiro clientes aut EA public void saveClientes try FileOutputStream dataFile new F
5. files readClientes try while true Bloqueia at haver uma liga o Socket socket s accept try new ServeCliente socket admin files catch IOException e System out printin Erro na criacao do ServeCliente e socket close finally System out println Closing server s close Proxytel C digo fonte Classe ServeCliente import java io import java net import java util Trata de fazer a comunica o entre o servidor Proxytel o client Disponibiliza uma variada lista de comandos ao utilizador com destaque para os comandos de configura o apenas acessiveis pelo administrador do proxy root version 1 0 author Paulo Guilhoto author Luis Dinis if public class ServeClient xtends Thread private Socket socketl socket2 private BufferedReader in private BufferedWriter out private int echoo private Files files private String cwd help c connect mkuser rmuser listusers passwd mkremote rmremote emotes mkclient rmclient listclients exit private Communication coml com2 private Administration admin private Date date new Date private int time_inicio new int 6 private int time_fim new int 6 private String login param s socket de comunica o entre o servidor Proxytel o client param admin instancia
6. O InputStream de uma redireccionado para o OutputStream da outra repetindo se o processo mas desta vez ao contr rio criando assim um pipe bidireccional version 1 0 author Paulo Guilhoto author Luis Dinis public class Communication extends Thread private ServeCliente serveCliente private Socket socket private BufferedReader in private BufferedWriter out param i a InputStream de uma das sockets param o a OutputStream da outra socket public Communication InputStream i OutputStream o in new BufferedReader new InputStreamReader i out new BufferedWriter new OutputStreamWriter o start L caractere a caractere do InputStream e coloca o caractere no OutputStream A public void run String line char c try while true c char in read indica o fim da liga o if c 65535 return out write c out flush r catch IOException e Proxytel C digo fonte Classe Files import java io import java util import java net Trata da leitura e escrita nos ficheiros utilizadores aut remotos aut e clientes aut version 1 0 author Paulo Guilhoto author Luis Dinis EA public class Files private Administration admin public Files Administration admin this admin admin Leitura de uma Hashtable do ficheiro utilizadores aut Ef public void re
7. match amp amp tentativas 3 return else writeChars n r n rFor some help type help n r prompt do cwd_ok false writeChars proxytel gt line readLine if line equals StringTokenizer token new StringTokenizer line cwdz token nextToken index indexOf cwdz comandos comuns a todos os utilizadores switch index case 0 ajuda if login equals root roothelp else help cwd_ok true break case 1 case 2 liga o a um servidor remoto if token countTokens 2 connect token nextToken token nextToken else if token countTokens 1 connect token nextToken 23 porto por defeito de Telnet cwd_ok true break case 6 altera o da password if token countTokens 2 if admin alteraPass login token nextToken token nextToken writeChars not succeed n r else writeChars successfull n r cwd_ok true break case 9 listagem de todos os servidores remotos admin list remotes out cwd_ok true break case 13 exit cwd_ok true Proxytel C digo fonte xii if login equals root switch index case 0 ajuda case 3 cria o de um novo utilizador if token countTokens 2 if admin create_user token nextToken token nextToken writeChars not succeed n r else writeChars successfull n r cwd_ok true break case 4
8. Universidade de Coimbra Faculdade de Ci ncias e Tecnologias Departamento de Engenharia Informatica Proxytel Introdu o as Redes e Servi os de Comunica o 2000 01 Relat rio T cnico Paulo Jos dos Santos Guilhoto Lu s Filipe Lopes Rosa Dinis Proxytel Relat rio t cnico Departamento de Engenharia Informatica Faculdade de Ci ncias e Tecnologia da Universidade de Coimbra Relat rio T cnico do Proxytel Trabalho realizado para a disciplina de Introdu o s Redes e Servi os de Comunica o no mbito da Licenciatura da Engenharia Inform tica Paulo Jos dos Santos Guilhoto guilhoto student dei uc pt N 985011444 Luis Filipe Lopes Rosa Dinis Idinis student dei uc pt N 985011476 Dezembro de 2000 Proxytel Relat rio t cnico 3 Conteudo Introdu o Especifica o interna cecceceececeececeeceeeeeeceeeeseeseeetaeeees Manual do utilizador ANEXOS usas ces C digo fonte Javadoc Proxytel Relat rio t cnico Introdu o Nas organiza es ligadas Internet cada vez mais frequente a utiliza o de sistemas de firewall como garante da seguran a dos sistemas inform ticos face s amea as vindas do exterior do organiza o neste ambiente que se insere o Proxytel Com o objectivo de filtrar as comunica es com o exterior da rede e as entradas na rede interna s o utilizados como intermedi rios servidores de comunica es e proxys
9. de acordo com o especificado nos RFC s e est retratado na fun o que se segue private String readLine char c b String str new String try do c char in read if echoo 1 if int c 8 int c 127 backspace if str length 0 writeChar char 8 writeChar char 32 writeChar char 8 else Proxytel Relat rio t cnico 8 if int c 13 amp amp int c 10 writeChar c else if int c 13 b char in read writeChar char 13 writeChar char 10 ls sem echo if int c 13 b char in read if int c 10 amp amp int c 13 amp amp int c 8 amp amp int c 127 ELES Ser RG if int c 8 int c 127 amp amp str length 0 str str substring 0 str length 1 Jjwhile int c 13 amp amp int c 10 catch IOException e System out printin Erro ao ler caracteres do cliente return str Apenas necess rio lembrar que cada linha lida termina com os caracteres CR LF O que quer dizer que a partir do momento em que se l o caractere CR a linha est completa Mas necess rio ler o pr ximo caractere LF de forma a n o armazenar lixo no buffer para a leitura da pr xima linha As fun es que t m aparecido no meio das linhas de c digo writeChars e writeChar apenas colocam os dados na stream de sa da da Socket priv
10. compress o SHA sha MessageDigest getInstance SHA catch NoSuchAlgorithmException e System out printlin Erro no algoritmo de compress o pa Cria um novo utilizador param login o login do novo utilizador param password a password do novo utilizador return true se o utilizador foi criado com sucesso return false caso contr rio Ef public synchronized boolean create user String login String password Object obj verifica se ja exist sse utilizador obj hash get login if obj null return false if login null amp amp password null encripta a password sha update password getBytes j byte encrypt sha digest obj hash put login encrypt guarda as altera es files saveUtilizadores return true Remove um utilizador da lista de utilizadores autorizados param login o login do utilizador a remover return true se o utilizador foi removido com sucesso return false caso contr rio EJ public synchronized boolean delete_user String login Object obj verifica se o utilizador existe obj hash get login if obj null login equals root return false if login null obj hash remove login guarda as altera es files saveUtilizadores return true Proxytel C digo fonte Efectua uma enumera o de todos os utilizadores autorizados a entrar no Proxytel
11. da classe param f inst ncia da classe A public ServeCliente Socket s Administration admin Files f throws java io IOException this admin admin files f socket1 s try in new BufferedReader new InputStreamReader socketl getInputStream out new BufferedWriter new OutputStreamWriter socketl getOutputStream catch IOException e System out printin Erro nos streams dos sockets start Trata de identificar o utilizador e de responder a todos os comandos introduzidos por este xy public void run boolean match false int tentativas 0 String pass String line cwdz int index boolean cwd_ok false try desactiva echo local writeChars i HK KK a KK RR RR KKK RK KEN Vl writeChars Bemvindo ao Proxytel do DEI Naa Nae writeChars n xr writeChars versao 1 0 Anos writeChars ay eK KK KK RR RR RR RR ANO Vl A Proxytel C digo fonte r LIStE verifica se o cliente est ligado de uma m quina autorizada if admin identifica client socketl getInetAddress echo 1 identifica o do utilizador do tentativas tt writeChars n rLogin login readLine writeChars login s Password echo 0 pass readLine echo 1 match admin identifica_user login pass if match writeChars n rLogin incorrect n r while match amp amp tentativas lt 3 if
12. elimina o de um utilizador if token countTokens 1 if admin delete_user token nextToken writeChars not succeed n r else writeChars successfull n r cwd_ok true break case 5 listagem de todos os utilizadores admin list users out cwd_ok true break case 7 adi o de um novo servidor remoto if token countTokens 1 if admin add remote token nextToken writeChars not succeed n r else writeChars successfull n r cwd_ok true break case 8 elimina o de um servidor remoto if token countTokens 1 if admin delete_remote token nextToken writeChars not succeed n r else writeChars successfull n r cwd_ok true break case 10 adi o de um novo cliente if token countTokens 1 if admin add client token nextToken writeChars not succeed n r else writeChars successfull n r cwd_ok true break case 11 elimina o de um cliente if token countTokens 1 if admin delete_client token nextToken writeChars not succeed n r else writeChars successfull n r cwd_ok true break case 12 listagem de todos os clientes admin list_clients out cwd_ok true break if cwd_ok writeChars command not understood n r else cwdz while cwdz equals exit Proxytel C digo fonte xiii cliente n o autorizado else
13. return false caso contr rio K public boolean delete_remote String remote try InetAddress host InetAddress getByName remote boolean index remotes removeElement host if index return false guarda as altera es files saveRemotos return true catch java net UnknownHostException e return false Efectua uma enumera o de todas as m quinas remotas autorizadas como destino das liga es param out o Stream do cliente para o qual deve ser enviada a lista public void list remotes BufferedWriter out String s try Enumeration enum remotes elements percorre todo o Vector de m quinas remotas while enum hasMoreElements s InetAddress enum nextElement n r out write s 0 s length out flush catch IOException e System err printin IO Exception Verifica se a maquina especificada faz parte da lista de maquinas remotas autorizadas como destino das liga es return true se uma m quina autorizada return false caso contr rio F x Proxytel C digo fonte Rj public boolean identifica remote InetAddress host int index remotes indexOf host if index 1 return false return true Adiciona uma nova maquina cliente autorizada para efectuar liga es param client a m quina cliente return true se foi adicionada a m quina origem com suces
14. InputStream socket2 new Socket addr porto comi new Communication socket1l getInputStream socket2 getOutputStream com2 new Communication socket2 getInputStream socketl getOutputStream try coml join com2 join catch InterruptedException e System out println error As duas instru es join servem para garantir que a Thread fica a espera que as duas outras Threads morram para esta poder prosseguir Desta forma possibilita se que a liga o entre o servidor Proxytel e a m quina origem continue activa mesmo depois de se ter terminado a liga o a uma m quina remota Proxytel Relat rio t cnico 10 Um problema com o qual nos deparamos foi a impossibilidade de efectuar duas liga es durante a execu o do servidor a determinadas m quinas destino Este problema verifica se no entanto em situa es bem delimitadas sendo uma das condicionantes a m quina origem estar a funcionar num terminal do sistema operativo Unix Resta ent o apenas explicar o que cada Thread da classe Communication faz enquanto est a executar O processo bastante simples e j foi descrito mais acima S o lidos caractere a caractere os dados da stream de entrada at ocorrer o caractere 65535 que indica o fim da liga o e s o escritos na stream de sa da Uma eventual altera o em futuras vers es seria passar de uma comunica o constitu da pelo envio de pacotes de caracteres para uma comu
15. Logs String login InetAddress origem InetAddress destino int time_inicio int time_fim try String logEntry String tempo_inicio tempo_fim BufferedWriter logFile new BufferedWriter new FileWriter logs txt true for int i 0 i lt 6 i switch i case 2 tempo inicio tempo inicio time inicio i tempo fim tempo fim time fim i break case 5 tempo inicio tempo inicio time iniciol il tempo fim tempo fim time fim il break default tempo inicio tempo inicio time inicio i j tempo fim tempo fim time fim i logEntry login origem destino tempo inicio tempo_fim logFile write logEntry logFile newLine logFile close catch IOException e System out printin Erro na escrita do ficheiro de logs Leitura de um Vector de m quinas remotas autorizadas do ficheiro remotos aut ETA public void readRemotos try File f new File remotos aut if f exists FileInputStream dataFile new FileInputStream remotos aut Object InputStream file in new ObjectInputStream dataFile Vector remotes Vector file in readObject admin setRemotes remotes file_in close else System out printin O ficheiro remotos aut n o existe catch Exception e System out printlin Erro na leitura do ficheiro remotos aut e
16. adUtilizadores String login String pass try File f new File utilizadores aut if f exists FileInputStream dataFile new FileInputStream utilizadores aut ObjectInputStream file_in new ObjectInputStream dataFile Hashtable hash Hashtable file_in readObject admin setHash hash file_in close else n o existe o ficheiro logo criado por defeito um primeiro utilizador o administrador do proxy root admin create user root root catch Exception e System out printin Erro na leitura do ficheiro utilizadores aut e Escrita da Hashtable contendo todos os utilizadores acreditados no ficheiro utilizadores aut a public void saveUtilizadores try FileOutputStream dataFile new FileOutputStream utilizadores aut ObjectOutputStream file out new ObjectOutputStream dataFile file_out writeObject admin getHash file_out close catch Exception e System out printin Erro na escrita do ficheiro utilizadores aut e Escrita de um registo de log no ficheiro logs txt param login login do utilizador param origem maquina a partir do qual se ligou o cliente param destino maquina qual o cliente efectuou liga o param time inio momento em que se iniciou a liga o Gparam time fim momento em que se fechou a liga o F XX x Proxytel C digo fonte vi public void save
17. ate void writeChars String s try out write s 0 s length out flush catch IOException e System err printin IO Exception private void writeChar char c try out write c out flush catch IOException e System err printin IO Exception Voltemos ent o parte da valida o do utilizador Depois de feita o utilizador tem acesso a comandos do sistema que n o interessam para j referir Salienta se apenas que o administrador do Proxytel utilizador root tem acesso a um conjunto muito mais vasto de comandos permitindo lhe assim configurar o sistema em termos de utilizadores m quinas origem e m quinas destino das liga es Vamos centrar nos no comando mais importante connect ou simplesmente o Atrav s deste comando permitido estabelecer uma liga o com uma m quina remota e concatenar essa liga o com a liga o que j existia com a m quina cliente Proxytel Relat rio t cnico 9 A primeira coisa a fazer verificar se a maquina destino escolhida existe Para isso basta transformar o nome da maquina num endere o nico resultado da combina o do nome da m quina e do seu IP e verificar se disparou alguma excep o try addr InetAddress getByName machine catch java net UnknownHostException e writeChars host unknown n r host_unknown true Depois de ter a certeza que a maquina existe necess rio verificar se a ma
18. ecebido o caractere CR Para isso usou se a sequ ncia SUPPRESS GO AHEAD private void desactiva echo local char c try TAC WILL ECHO writeChar char 255 writeChar char 251 L writeChar char c char in read c char in read c char in read SUPPRESS GO AHEAD writeChar char 255 writeChar char 251 writeChar char 3 E char in read E char in read c char in read catch IOException e r r r Verifica se ent o se o cliente faz parte da lista de m quinas origem autorizadas contida no ficheiro clientes aut Tal como para o caso das m quinas destino autorizadas que iremos ver mais frente a lista de m quinas cliente uma estrutura do tipo Vector ou seja uma estrutura din mica que para al m de permitir pesquisas e elimina es r pidas cresce medida que lhe vamos adicionando itens Este Vector lido do ficheiro apenas quando se inicia o servidor e guardado em ficheiro sempre que lhe s o feitas altera es quer ao n vel da inser o de novas m quinas origem quer ao n vel da sua elimina o Depois de validada a origem da liga o chega se ent o parte da identifica o do utilizador A lista de utilizadores est organizada sobre a forma de uma Hashtable permitindo assim pesquisas muito r pidas consoante o valor de uma chave que neste caso o login do utilizador Sendo assim basta carregar a Hashtable de uti
19. el C digo fonte e else if int c 13 amp amp int c 10 writeChar c else if int c 13 b char in read writeChar char 13 writeChar char 10 ls sem echo if int c 13 b char in read if int c 10 amp amp int c 13 amp amp int c 8 amp amp int c 127 str str c if int c 8 int c 127 amp amp str length 0 str str substring 0 str length 1 while int c 13 amp amp int c 10 catch IOException e System out printin Erro ao ler caracteres do cliente return str Permite efectuar a liga o a um servidor remoto E criada uma nova socket para efectuar a comunica o entre o servidor Proxytel e o servidor remoto param machine servidor remoto ao qual se est a tentar fazer a liga o param port porto do servidor remoto habitualmente 23 private void connect String machine String port int porto InetAddress addr null boolean host unknown false try addr InetAddress getByName machine catch java net UnknownHostException e writeChars host unknown n r host_unknown true if host unknown verifica se a m quina faz parte da lista de remotos acess veis if admin identifica remote addr writeChars Connecting n r try try porto Integer parselInt port catch NumberForma
20. host unknown Proxytel Relat rio t cnico 13 Se a maquina lt remote gt n o fizer parte das m quinas destino autorizadas devolvida a mensagem access not allowed type listremotes to see a list of available remotes Q c lt remote gt port Semelhante ao comando connect QU passwd lt old gt lt new gt Altera a password do utilizador actual Deve ser especificada a password antiga em lt o d gt assim como a nova em lt new gt Caso a password lt o d gt n o corresponda password actual do utilizador devolvida a mensagem not succeed QU listremotes Mostra todos os m quinas destino registadas no servidor Proxytel QO help Mostra a lista de todos os comandos dispon veis para o utilizador actual Q exit Sai do Proxytel cortando a liga o com o servidor Proxytel Relat rio t cnico 14 Proxytel Relat rio t cnico Anexos 15 Classe Administration import java util import java security import java io import java net Permite fazer a gest o do proxy em termos de utilizadores destinos e origens das liga es version 1 0 author Paulo Guilhoto author Luis Dinis Rj public class Administration private Hashtable hash new Hashtable private Vector remotes new Vector private Vector clients new Vector private MessageDigest sha private Files files public Administration try cria uma nova inst ncia do algoritmo de
21. icada faz parte da lista de m quinas cliente autorizadas para efectuar liga es return true se uma m quina autorizada return false caso contr rio F x Proxytel C digo fonte iv X7 public boolean identifica_client InetAddress client int index clients indexOf client if index 1 return false return true param files VA public void setFiles Files files this files files param hash ETA public void setHash Hashtable hash this hash hash Devolve a Hashtable de utilizadores autorizados a se ligarem ao Proxytel return a Hashtable de utilizadores autorizados xy public Hashtable getHash return hash param remotes ETA public void setRemotes Vector remotes this remotes remotes Devolve o Vector de m quinas remotas autorizadas como destino das liga es return o Vector de m quinas remotas public Vector getRemotes return remotes param clients AY public void setClients Vector clients this clients clients Devolve o Vector de m quinas cliente autorizadas a efectuar liga es return o Vector de m quinas cliente ESA public Vector getClients return clients Proxytel C digo fonte Classe Communication import java io import java net 4 F F x Concatena as liga es entre as duas sockets
22. ileOutputStream clientes aut ObjectOutputStream file out new ObjectOutputStream dataFile file_out writeObject admin getClients file_out close catch Exception e System out printlin Erro na escrita do ficheiro clientes aut e Proxytel C digo fonte Classe Proxytel import java io import java net 4 pu Cria o do servidor O servidor fica espera no porto especificado como par metro De cada vez que chega um cliente criada uma nova socket para servir cada cliente permitindo assim atender v rios pedidos de origens O resto do processo ent o reencaminhado para a classe ServeClient version 1 0 author Paulo Guilhoto author Luis Dinis blic class Proxytel private static final int PORT 7080 private static int porto private static Files files private static Administration admin public static void main String args throws IOException Tratamento dos par metros de entrada if args length if args 0 equals p try porto Integer parseInt args 1 catch NumberFormatException e porto PORT else porto PORT else porto PORT ServerSocket s new ServerSocket porto System out printin Servidor iniciado no porto porto admin new Administration files new Files admin admin setFiles files files readUtilizadores j files readRemotos
23. inadas fun es do sistema Atrav s da cria o de uma Thread para cada liga o ao servidor possibilita se assim o atendimento a v rios clientes em simult neo while true Bloqueia at haver uma liga o Socket socket s accept try new ServeCliente socket admin files catch IOException e System out printin Erro na criacao do ServeCliente e socket close nova Thread ServeCliente Cria o de uma Socket pedido nova Thread ServeCliente Criagdo de uma Socket ServerSocket accept nova Thread ServeCliente Cria o de uma Socket Proxytel Relat rio t cnico 6 Ao entrar na classe ServeC iente a primeira coisa a fazer desactivar o echo local da m quina origem Optou se por proceder desactiva o do echo local e ao consequentemente uso do echo gerado pelo Proxytel por motivos de for a maior neste caso de sistemas operativos De facto a aplica o de Telnet do sistema operativo Windows recusa se a negociar os par metros de echo obrigando assim ao uso incondicional do echo gerado pelo servidor Proxytel Para a desactiva o do echo local utilizou se a sequ ncia JAC WILL ECHO indicando assim que seria o servidor Proxytel a fazer echo Tamb m se procede indica o de que o cliente dever permitir a visualiza o dos caracteres medida que os recebe do echo do servidor Proxytel e n o somente quando r
24. lizadores que est guardada no ficheiro utilizadores aut apenas aquando da inicia o do servidor Proxytel Resta apenas agora esclarecer como foi feito o processo de encripta o da password do utilizador O algoritmo de codifica o utilizado foi o SHA um dos v rios algoritmos disponibilizados pela Sun Microsystems na package java security Por isso n o ir aqui ser descrito qual o funcionamento do algoritmo mas sim como que este foi utilizado para responder s exist ncias deste projecto Apenas iremos salientar como que criado e inicializado o algoritmo de compress o e como feita a encripta o de uma String password try cria uma nova inst ncia do algoritmo de compress o SHA sha MessageDigest getInstance SHA catch NoSuchAlgorithmException e System out printlin Erro no algoritmo de compress o Proxytel Relat rio t cnico 7 encripta a password sha update password getBytes coloca o resultado num array de bytes byte encrypt sha digest Mais acima referimos que a Hashtable tinha como chave o login do utilizador Basta apenas referir que o elemento associado a cada chave a respectiva password do utilizador j encriptada Por m uma das caracter sticas do algoritmo de encripta o utilizado que n o poss vel obter a password como ela era inicialmente depois de esta estar encriptada Sendo assim uma forma de comparar a password da Hashtable c
25. nica o baseada no envio de pacotes com linhas completas try while true c char in read indica o fim da liga o if c 65535 return out write c out flush r catch IOException e Proxytel Relat rio t cnico 11 Manual do Utilizador O utilizador dever utilizar uma aplica o de Telnet e ligar se ao servidor Proxytel no porto onde este foi ligado De seguida o utilizador dever introduzir o seu login e a sua password para se identificar O utilizador disp es de tr s tentativas para inserir a password correcta caso contr rio a aplica o ser fechada automaticamente Cada vez que o utilizador introduz uma password errada aparece a mensagem Login incorrect Se o utilizador estiver acreditado para entrar no Proxytel dever aparecer a prompt sinal de que o servidor est pronto a receber comandos importante salientar que existem dois tipos de utilizadores o administrador utilizador root e o utilizador comum Estes t m um leque diferente de comandos sua disposi o bastante mais alargado para o administrador devido s suas fun es de gestor De referir tamb m que para auxiliar qualquer d vida do utilizador este poder recorrer em qualquer altura ao comando help o que permitir lhe visualizar a listagem de todos os comandos aos quais tem acesso assim como a sua respectiva sintaxe de utiliza o Segue uma listagem de todos os comandos dispon veis
26. om a password introduzida aquando do login simplesmente encriptando a password recebida no login e compar la byte a byte com a password da hashtable public synchronized boolean identifica user String login String password sha reset vai buscar a password da Hashtable correspondendo a este utilizador byte pass_read byte hash get login encripta a password passada como par metro para a poder comparar com a password j encriptada existente na Hashtable sha update password getBytes byte encrypt sha digest if pass read null comparaPass pass read encrypt return false return true public boolean comparaPass byte passl byte pass2 if passl length pass2 length return false for int i 0 i lt passl length i if passl i pass2 i return false return true Falta nos agora referir como funciona o processo de leitura de uma linha da Socket de comunica o entre o servidor Proxytel e o cliente A leitura do terminal da m quina origem processa se caractere a caractere por causa do servidor ter que fazer o echo Depois basta apenas verificar se o caractere lido ou n o um caractere dito especial Isto se for pressionada a tecla Backspace caractere 8 no sistema operativo Windows e 127 no sistema operativo Unix deveremos voltar ao caractere anterior inserir um caractere Space e deslocar de novo o cursor para a esquerda Todo este processo est
27. ote gt Caso n o exista nenhuma m quina destino com esse nome ou IP devolvida a mensagem not succeed Q listremotes Mostra todos os maquinas destino registadas no servidor Proxytel O mkclient lt client gt Adiciona uma nova m quina origem com o nome ou o IP lt client gt lista existente Caso j exista uma m quina origem com esse nome ou IP devolvida a mensagem not succeed QU rmclient lt client gt Remove a maquina origem com o nome ou IP indicado por lt client gt Caso n o exista nenhuma m quina origem com esse nome ou IP devolvida a mensagem not succeed QO listclients Mostra todos os maquinas origem registadas no servidor Proxytel Q passwd lt old gt lt new gt Altera a password do utilizador actual Deve ser especificada a password antiga em lt o d gt assim como a nova em lt new gt Caso a password lt o d gt n o corresponda password actual do utilizador devolvida a mensagem not succeed WU help Mostra a lista de todos os comandos dispon veis para o utilizador actual QO exit Sai do Proxytel cortando a liga o com o servidor Utilizador comum Q connect lt remote gt port Estabelece uma liga o Telnet maquina especificada em lt remote gt Opcionalmente poss vel especificar o porto de liga o no par metro port caso este seja diferente do porto 23 Se a m quina lt remote gt n o existir na rede devolvida a mensagem
28. para cada tipo de utilizador Administrador root Q connect lt remote gt port Estabelece uma liga o Telnet maquina especificada em lt remote gt Opcionalmente poss vel especificar o porto de liga o no par metro port caso este seja diferente do porto 23 Se a m quina lt remote gt n o existir na rede devolvida a mensagem host unknown Se a m quina lt remote gt n o fizer parte das m quinas destino autorizadas devolvida a mensagem access not allowed type listremotes to see a list of available remotes c lt remote host gt port Semelhante ao comando connect O mkuser lt login gt lt password gt Cria um novo utilizador com o login especificado por lt ogin gt e a password indicada em lt password gt Caso j exista um utilizador com o mesmo login devolvida a mensagem not succeed O rmuser lt login gt Remove o utilizador com o login indicado em lt ogin gt Caso n o exista nenhum utilizador com esse login devolvida a mensagem not succeed Proxytel Relat rio t cnico 12 QU listusers Mostra todos os utilizadores registados no servidor Proxytel Q mkremote lt remote gt Adiciona uma nova maquina destino com o nome ou o IP lt remote gt a lista existente Caso j exista uma m quina destino com esse nome ou IP devolvida a mensagem not succeed rmremote lt remote gt Remove a m quina destino com o nome ou IP indicado por lt rem
29. quina destino faz parte da lista de m quinas remotas autorizadas O processo exactamente o mesmo que sucedeu anteriormente aquando da verifica o da m quina cliente De novo temos uma estrutura Vector que vai conter os endere os de todas as m quinas destino autorizadas Essa estrutura guardada no ficheiro remotos aut sempre que feita alguma altera o na lista de m quinas pelo administrador e apenas lida aquando da inicializa o do servidor Proxytel Se a m quina fizer parte da lista de m quinas destino autorizadas passa se ent o fase seguinte que consiste na cria o de uma nova Socket para fazer a comunica o entre o servidor Proxytel e a m quina destino e de duas novas Threads que ir o redireccionar a comunica o cada uma no seu sentido Isto uma das Threads ir buscar dados stream de sa da da nova Socket e colocar los a na stream de entrada da Socket que fazia a comunica o entre o servidor Proxytel e a m quina origem ou cliente enquanto que a outra Thread faz precisamente o contr rio colocando os dados sa da da stream j existente na stream de entrada da Socket mais recente Consegue se assim uma liga o virtual directa entre a m quina cliente que se ligou ao servidor Proxytel e a m quina remota nova Thread Socketi p Socket2 Communication getOutputStream getInputStream Cria o de um nova Socket nova Thread Socket2 p Socket1 Communication getOutputStream get
30. rs exit n r Listagem de todos os comandos disponiveis para o administrador Ef private void roothelp writeChars connect lt remote gt port makes a telnet link connection to a remote host n r writeChars c lt remote host gt port same usage as connect Aree oF writeChars mkuser lt login gt lt pass gt creates a new user n r writeChars rmuser lt login gt removes an existing user n r writeChars listusers shows a list of all the users n r writeChars mkremote lt remote gt adds a new remote host which can be a string or a IP n r writeChars rmremote lt remote gt removes an existing host n r writeChars listremotes shows a list of all the remotes available n r writeChars mkclient lt client gt adds a new client which can be a string or a IP n xr writeChars rmclient lt client gt removes an existing client n r writeChars listclients shows a list of all the clients available n r writeChars passwd lt old gt lt new gt changes password of the current user n r writeChars help displays this list n r writeChars exit n r Coloca num array todos os dados relativos ao tempo corrente param tempo o array de inteiros a preencher return o array de inteiros preenchido y private int getTime int tempo tempo 0 date getYear 1900 tempo 1 date getMonth 1 tempo 2 date getDate
31. sendo estes dedicados a restringir determinado servi o O Proxytel mais um destes proxys que se encontra no seio da firewall com o intuito de autenticar as entradas e ou sa das de uma rede protegida exclusivamente para aplica es de Telnet Sendo assim era pedido que fosse constru do um servidor que quando colocado a funcionar numa m quina obrigasse autentica o dos utilizadores para estes poderem entrar ou sair da rede interna Proxytel Relat rio t cnico 5 Especificacao interna O servidor de Proxytel comeca por ser criado na classe Proxyte atrav s de uma ServerSocket num determinado porto da maquina Esse porto especificado aquando da execu o do servidor atrav s da adi o do par metro p Segue um exemplo java Proxytel p 5959 De seguida o servidor fica continuamente espera de liga es de clientes m quina onde est a correr e ao respectivo porto Este mecanismo posto em pr tica atrav s da fun o ServerSocket accept De cada vez que chega um cliente criada uma nova Socket para estabelecer a comunica o directa entre o servidor Proxytel e este cliente dando assim a no o que existe um canal f sico directo de comunica o entre as duas m quinas o equivalente a um pipe bidireccional A Socket criada ent o enviada para a classe ServeCliente que uma Thread onde ir ser feita a autentica o dos utilizadores e cria o de um ambiente onde este poder aceder a determ
32. so return false caso contr rio RA public boolean add client String client try InetAddress host InetAddress getByName client int index clients indexOf host if index 1 return false clients addElement host guarda as altera es files saveClientes return Crue catch java net UnknownHostException e return false Remove uma m quina cliente autorizada para efectuar liga es param client a m quina cliente return true se foi removida a m quina origem com sucesso return false caso contr rio public boolean delete client String client try InetAddress host InetAddress getByName client boolean index clients removeElement host if lindex return false guarda as altera es files saveClientes return Crue catch java net UnknownHostException e return false Efectua uma enumera o de todas as m quinas cliente autorizadas para efectuar liga es param out o Stream do cliente para o qual deve ser enviada a lista A public void list clients BufferedWriter out String s try Enumeration enum clients elements while enum hasMoreElements s InetAddress enum nextElement n r out write s 0 s length out flush catch IOException e System err printin IO Exception Verifica se a m quina especif
33. tException e porto 23 socket2 new Socket addr porto guarda informa o til para registo dos logs time inicio getTime time inicio comi new Communication socket1l getInputStream socket2 getOutputStream com2 new Communication socket2 getInputStream socketl getOutputStream try coml join com2 join catch InterruptedException e System out printlin error writeChars n r guarda informa o til para registo dos logs Proxytel C digo fonte xv time fim getTime time fim files saveLogs login socket1l getInetAddress addr time inicio time fim catch IOException e System out printlin Erro na comunicacao finally try socket2 close catch IOException e System out println Socket2 not closed else writeChars access not allowed type listremotes to see a list of available remotes n r Listagem de todos os comandos disponiveis para o utilizador comum EJ private void help writeChars connect lt remote gt port makes a telnet link connection to remote host Ande writeChars c lt remote gt port same usage as connect NNT writeChars passwd lt old gt lt new gt changes password of the current user n r writeChars listremotes shows a list of all the remotes available n r writeChars help displays this list n r writeCha
34. writeChars n rCliente nao autorizado n r finally try socketl close catch IOException e System out printin Socketl not closed Permite desligar ou ligar o echo efectuado pelo servidor dos dados enviados pelo cliente param n Se 0 desliga o echo Se 1 liga o echo private void echo int n echoo n Permite negociar os par metros da liga o com o cliente primeiro indicado que ser o servidor Proxytel a fazer o echo dos dados depois pedido ao cliente para mostrar os caracteres medida que est o a ser introduzidos pelo utilizador A private void desactiva echo local char e try IAC WILL ECHO writeChar char 25 writeChar char 25 5 1 writeChar char 1 c char in read c char in read c char in read SUPPRESS GO AHEAD writeChar char 255 writeChar char 251 writeChar char 3 c char in read c char in read c char in read catch IOException e L uma string da socket caractere a caractere necess rio return a string lida if private String readLine char c b String str new String e faz o echo caso seja try do c char in read if echoo 1 if int c 8 int c 127 backspace if str length 0 writeChar char 8 writeChar char 32 writeChar char 8 Proxyt

Download Pdf Manuals

image

Related Search

Related Contents

SOPORTE PARA TV LCD/LED EXTRA-DELGADO (17"-37")  registre des conventions de stage  libretto living 2010  Smeg SY92PBL8 cooker  Philips HX7022  DOCOL MASSIMA / MANGIARE  デジタルファイバセンサ  Berkeley Water Center Data Cube  

Copyright © All rights reserved.
Failed to retrieve file