[RESOLVIDO] Pegar IP da máquina  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Pessoal, preciso pegar o IP da máquina que estou, isso em windows e linux. Procurei sobre isso e todos os exemplos que encontrei me levam ao mesmo problema.

Bom, encontrei duas formas de fazer isso, vejam:


Qdo eu executo no windows funciona, porém no linux ele sempre me retorna o IP 127.0.0.1.
Vejam como fica a saída do código acima:

IP: 127.0.0.1
Nome: renata


Então tentei desta segunda forma:



Esta de fato (pelo menos no linux pq no win eu ainda não testei), me retorna todas as informações possíveis, entre elas o tal IP que é o que eu quero. Mas como vou saber dentre as informações que ela libera, qual é a que eu quero?! Isso pode variar de linux pra linux, dependendo tb da placa de rede. Como faço? Vejam a saída do código acima:

eth0 -> ip: MEUIPV6 - hostname: MEUIPV6
eth0 -> ip: MEUIP - hostname: MEUIP
lo -> ip: 0:0:0:0:0:0:0:1%1 - hostname: 0:0:0:0:0:0:0:1%1
lo -> ip: 127.0.0.1 - hostname: localhost

Onde MEUIPV6 é aquele ipv6 que aparece qdo vou no console e digito ifconfig. E MEUIP é o IP da minha máquina.

Pessoal, será que não tem um jeito de eu pegar o IP da máquina local no linux?! No win eu já consegui, mas e no linux?!

Encontrei até um post do thingol de 2004 dizendo que em alguns linux haveria esse problema que estou enfrentando. Alguma dica pessoal? Uso linux slackware.

Grata,

This message was edited 1 time. Last update was at 09/10/2007 16:05:31


[]'s, Renata
[Email]
kleins
JavaTeenager
[Avatar]

Membro desde: 19/03/2007 13:05:03
Mensagens: 171
Offline

Quando vc faz a conexão vc está fazendo chamando o localhost ?

Se estiver fazendo isso, ele só vai te dar o localhost mesmo...

Chame a conexão pelo ip da placa eth que ele vai dar o ip correto.


[]'s

Rodrigo

This message was edited 2 times. Last update was at 09/10/2007 13:50:08


Rodrigo
[Yahoo!] [MSN] [ICQ]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

kleins wrote:Quando vc faz a conexão vc está fazendo chamando o localhost ?

Se estiver fazendo isso, ele só vai te dar o localhost mesmo...

Chame a conexão pelo ip da placa eth que ele vai dar o ip correto.


[]'s

Rodrigo


Rodrigo obrigada por responder.

Como assim qdo faço a conexão?!

Chamar pelo IP da placa eth? E como eu vou saber qual o IP da placa eth?!

Desculpe mas não entendi...


Grata

[]'s, Renata
[Email]
maior_abandonado
JWizard
[Avatar]

Membro desde: 03/09/2007 11:30:08
Mensagens: 2694
Localização: sp
Offline

a menos que eu esteja errado (me corrijam por favor nesse caso) ele intendeu que você ta tentando conecta com a propria maquina, abri um socket para si mesmo, ou algo assim...e não apenas pega o proprio endereço ip...

Renata, eu tinha pensado em um negocio meio gambi...por isso nem tinha me pronunciado...rs

mais ja q nimguem falo nada melhor, vc tento fazer o seguinte: pega essa string do retorno, semelhante ao que daria no ifconfig, e ai vc vai varrer ela, procurando por algum token aonde esteja escrito assim:

<grupo de 1 a 3 caracteres> <ponto> <grupo de 1 a 3 caracteres> <ponto> <grupo de 1 a 3 caracteres> <ponto> <grupo de 1 a 3 caracteres>

encontrada uma parte assim vc vai ter que verificar se esses caracteres são todos numeros.

sendo todos numeros vc tem que verifica se não é 127.0.0.1 ...rsrsrs se for vc continua loopando aonde varre a string procurando pelo ip.

tipo um mini analisador lexico bem especifico pro seu caso.

aliais axo mais facil vc cria um metodo isIp que recebe como parametro a frasesona a procurar o ip la, ou outro nome melhor...enfim... nem tinha respondido pq acho isso meio gambi, alem do mais so mto iniciante em comparação a mta gente aqui, mais ja que nimguem falo nada...

bom...espero ter ajudado...

espero ter ajudado...

falando nisso, caso seu problema tenha sido resolvido, edite o seu primeiro post e coloque um [RESOLVIDO] no titulo do tópico.
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

É amigo... eu tb tinha pensado nessa "gambi"..rs... não se preocupe!

Tô tentando ver se existe uma forma mais elegante (e claro, mais confiável) tb de fazer isso. Mas parece q está difícil...

Obrigada de qq forma!

[]'s, Renata
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

No seu caso, você tem de listar as interfaces de rede que têm o nome que inicia por eth (na sua máquina é eth0 mas aqui no serviço eu tenho uma máquina cuja interface de rede, listada pelo seu programa, é eth1), e que tenha um endereço IPV4.

(No caso do Solaris é mais chato porque as interfaces de rede têm nomes diferentes conforme o fornecedor da placa - se você tem uma placa Intel o nome é diferente de uma placa Broadcom).

É só não usar as interfaces de rede que começam por "lo" (loopback), que aí vão dar o endereço 127.0.0.1 ou coisa parecida. OK?

Você já chegou bem perto de onde você quer. Não tem gambiarra nenhuma para fazer.

This message was edited 1 time. Last update was at 09/10/2007 14:24:00

[WWW]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Peraih Thingol, deixa eu ver se compreendi direito. Eu fiz o seguinte código:



Ele me retorna o seguinte:

fe80:0:0:0:213:d4ff:fe7f:4d9d%2
111.222.333.444


Agora basta eu percorrer esse retorno procurando pelo primeiro conteúdo que contenha apenas 3 pontinhos e no máximo 3 números entre cada pontinho?! Fazendo isso não tem chance de a rotina me surpreender em alguma outra máquina diferente da minha?!

Grata,

[]'s, Renata
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Só vou lhe dizer uma coisinha.

Pode ser que sua máquina tenha várias interfaces de rede - por exemplo, máquinas Linux usadas como servidoras podem ter duas ou mais placas de rede, cada uma com um IP. (Ou então pode ser que sejam interfaces "dial-up" - pense numa máquina Linux configurada como roteadora e conectada a um cable modem ou modem discado mesmo).

Você precisa decidir qual dos IPs você vai escolher: se o da primeira placa de rede (eth alguma coisa), ou se outro endereço. O seu código escolhe um IP qualquer simplesmente pela enumeração.

Eu , no seu lugar, retornaria TODOS os IPs em uma lista (exceto os das interfaces loopback, que são praticamente inúteis), e o usuário da rotina é que deveria escolher qual IP a ser usado.

[WWW]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Era o que eu temia!
Pior que não posso retornar vários IPs. O usuário nem sabe oque estou fazendo, é algo transparente pra ele.

Meu problema é que não posso permitir que qdo for configurado o IP do micro onde está o BD seja colocado "localhost" ou "127.0.0.1". Sei que o BD funciona normalmente com esses valores, mas eu não posso permitir isso pro causa de alguns controles que tenho, e que uso esses IPs para esses controles. Então preciso que SEMPRE exista um IP configurado. Por ex, se tô na máquina 192.168.1.111, quero que ele coloque esse valor no IP e não "localhost".

Só que em alguns casos se trata de DHCP, então o kra justamente põem "localhost" pq ele não vai ficar trocando o IP da configuração a cada vez que liga e desliga a máquina.

Então o que quero fazer é que, antes de conectar com o BD, eu verifico, se estiver "localhost" ou "127.0.0.1" na configuração, eu quero pegar o IP da máquina e colocar no lugar.

Entende o problema?! No windows foi ridiculamente simples de ser feito,,, não consigo entender pq no linux está sendo tão complicado.

[]'s, Renata
[Email]
kleins
JavaTeenager
[Avatar]

Membro desde: 19/03/2007 13:05:03
Mensagens: 171
Offline

Pelo que entendi ela quer o endereço do cliente, certo ?

Eu perguntei se ela estava fazendo a requisição pra interface local, pois ele apresentaria o 127.0.0.1 mesmo.

Por exemplo.

Meu linux tem os seguintes endereços.

local : 127.0.0.1
eth0 : 192.168.1.1

Se eu aqui do meu navegador chamar o tomcat pelo ip local, ele vai me retornar que a conexão veio do 127.0.0.1 (dela pra ela mesma)

Se eu chamar pelo ip da eth0 ele vai me dar que a conexão veio da 192.168.1.1

Entendeu ?

Resumindo.. Se voc quer pegar o seu ip da eth0 (ou qualquer outra ethX) a sua conexão tem que sair por ela....

[]'s

Rodrigo

Rodrigo
[Yahoo!] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline


Então o que quero fazer é que, antes de conectar com o BD, eu verifico, se estiver "localhost" ou "127.0.0.1" na configuração, eu quero pegar o IP da máquina e colocar no lugar.

Você matou a charada. Se é uma configuração (o cara pode mudar à vontade e digitar qualquer IP; não está restrito a apenas 1 IP que você deixou chumbado), ponha o primeiro que encontrar.
[WWW]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

thingol wrote:Você matou a charada. Se é uma configuração (o cara pode mudar à vontade e digitar qualquer IP; não está restrito a apenas 1 IP que você deixou chumbado), ponha o primeiro que encontrar.


É... foi o que acabei fazendo já que não teve outro jeito!

Obrigada à todos!
[Email]
gugaa_df
JavaEvangelist
[Avatar]

Membro desde: 21/11/2006 18:28:41
Mensagens: 343
Offline

Por favor poderia postar a solução?
Eu preciso pegar o IP do usuário na máquina linux, ele sempre retorna 127.0.0.1, porém no windows funciona normalmente...
não entendi mto bem a solução...

Tecnólogo em Segurança da Informação
SCJP 5.0
SCWCD 5.0
OCBCD 5.0
[MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team