| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 11:46:25
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 13:39:16
|
kleins
JavaTeenager
![[Avatar]](/images/avatar/dcbe4be7606b574be9a50c64ffbe5254.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 13:58:20
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 14:10:52
|
maior_abandonado
JWizard
![[Avatar]](/images/avatar/0d7c463832b871c20405a6c9296b5517.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 14:18:23
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 14:23:15
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 14:37:04
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 14:51:07
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 15:00:31
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 15:03:12
|
kleins
JavaTeenager
![[Avatar]](/images/avatar/dcbe4be7606b574be9a50c64ffbe5254.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 15:03:27
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/10/2007 16:05:16
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2009 12:11:46
|
gugaa_df
JavaEvangelist
![[Avatar]](/images/avatar/3550284cdc2575eae68335f00870aaab.jpg)
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 |
|
|
 |
|
|