none
IP externo RRS feed

  • Pergunta

  • Olá Pessoal,

    Gostaria de saber, como eu posso fazer para pegar o meu IP externo, eu estou dentro de um rede.

    Na verdade não só para mim, preciso fazer isso via código para uma aplicaçãozinha.

     

    Obrigado.

    quarta-feira, 15 de setembro de 2010 14:44

Respostas

  • Thiago, a unica maneira q eu conheço é recorrendo a sites externos, veja se o metodo abaixo lhe serve

    var crendentials = new System.Net.NetworkCredential("USUARIO", "SENHADAREDE", "DOMINIO"); 
    
        var request = System.Net.WebRequest.Create(new Uri("http://www.ip-adress.com/"));
        request.Method = System.Net.WebRequestMethods.Http.Get;
        request.Credentials = crendentials;
        request.Proxy = new System.Net.WebProxy("192.168.90.4:9090");
        request.Proxy.Credentials = crendentials;
      
        var response = request.GetResponse();
        var streamResponse = response.GetResponseStream();
    
        byte[] byteResponse = new byte[response.ContentLength];
        streamResponse.Read(byteResponse, 0, (int)response.ContentLength);
        string htmlResponse = System.Text.Encoding.UTF8.GetString(byteResponse);
        string MyIp = htmlResponse.Substring(htmlResponse.IndexOf("My IP address is: ")+18, 15).Trim();
    
    quarta-feira, 15 de setembro de 2010 16:10

Todas as Respostas

  • Olá Cassio,

    Então, isso só funciona se eu estiver ligado diretamente a internet.

    Eu estou dentro de uma rede, o que eu quero é o IP externo, tipo, esse códigos que você me indicou me mostram

    o meu ip na rede interna.

    Será que existe alguma maneira de descobrir?

     

    Obrigado.

    quarta-feira, 15 de setembro de 2010 15:07
  • Thiago, a unica maneira q eu conheço é recorrendo a sites externos, veja se o metodo abaixo lhe serve

    var crendentials = new System.Net.NetworkCredential("USUARIO", "SENHADAREDE", "DOMINIO"); 
    
        var request = System.Net.WebRequest.Create(new Uri("http://www.ip-adress.com/"));
        request.Method = System.Net.WebRequestMethods.Http.Get;
        request.Credentials = crendentials;
        request.Proxy = new System.Net.WebProxy("192.168.90.4:9090");
        request.Proxy.Credentials = crendentials;
      
        var response = request.GetResponse();
        var streamResponse = response.GetResponseStream();
    
        byte[] byteResponse = new byte[response.ContentLength];
        streamResponse.Read(byteResponse, 0, (int)response.ContentLength);
        string htmlResponse = System.Text.Encoding.UTF8.GetString(byteResponse);
        string MyIp = htmlResponse.Substring(htmlResponse.IndexOf("My IP address is: ")+18, 15).Trim();
    
    quarta-feira, 15 de setembro de 2010 16:10
  • Bom,

     

    Não é isso, mas de qualquer forma muito obrigado pela ajuda.

     

    Obrigado.

    quarta-feira, 15 de setembro de 2010 16:33
  • talvez até haja outra maneira, mas desconheço :(

    se der certo, marque como resposta por favor

    Obrigado

    quarta-feira, 15 de setembro de 2010 16:35
  • Olavo,

    Então, eu acho que esse é o unico modo mesmo.

    Você poderia me explicar mais ou menos o que faz esse código, por exemplo,

    esse site externo deve ser meu? pergunto isso por causa do usuário e senha.

    Ou sera que esse usuário e senha são os meus de rede?

    E ainda, eu não sei praticamente nada a respito do funcionamento de redes, mas rede tem dominio?

     

    Bom, de qualquer forma eu agradeço muito pela ajuda.

    quarta-feira, 15 de setembro de 2010 16:37
  • vamos lá, como em redes internas nos utilizamos IPs não reais distribuidos por DHCP ou manualmente, nao temos como saber o IP real da rede que geralmente ta na saida do roteador...entao a unica maneira q eu encontrei foi recorrendo a sites como o www.meuip.com.br ou o q eu coloquei no metodo http://www.ip-adress.com/

    basicamente o código le esta pagina, navega dentro do html dela e pega o IP da sua rede e retorna pra vc

    como vc está dentro de uma rede, provavelmente deverá ter um proxy, por isto que a primeira linha tem de informar o usuário, senha e dominio que vc utiliza pra acessar a rede, se nao tiver proxy, pode desconsiderar tudo que tem a respeito dele.

    aonde tem escrito WebProxy vc devera colocar o endereço proxy da sua empresa se tiver

     

    quarta-feira, 15 de setembro de 2010 16:48
  • onde eu trabalho tem uma rede interna com proxie.

    o administador da rede me falou q o ip externo de todas as máquina é único e só pode ser pêgo se pegar o ip do servidor.

     

    não sei se ele  simplificou muito a explicação q me deu, mas eu entendi q não dá para pegar. ou, se der, vou pegar para todas as  máquinas o mesmo IP.

    quarta-feira, 15 de setembro de 2010 17:41
  • mas é isto mesmo, cada máquina tem um IP não real, que pode começar com 192.168 ou com 10.0 ou qualquer outro ip que faça parte do chamado range de ips reservados... e um ip fixo que fica na borda da rede, depois do entre o roteador de saída e o internet..este IP é o que vc consegue pegar com o metodo que lhe passei

    se vc usa proxy, tem de especificar qual o endereço do proxy da rede e um usuário e senha que utilize, por exemplo o seu

    quarta-feira, 15 de setembro de 2010 18:07
  • Segue código efetuando um tracert e trazendo o IP externo, para trazer o interno é só mudar o index da variável ips para 0.
    private void button1_Click(object sender, EventArgs e)
            {
                List<IPAddress> ips = new List<IPAddress>(GetTraceRoute("www.google.com"));
                MessageBox.Show(ips[1].ToString());
            }
    
            private const string Data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
    
            public static IEnumerable<IPAddress> GetTraceRoute(string hostNameOrAddress)
            {
                return GetTraceRoute(hostNameOrAddress, 1);
            }
            private static IEnumerable<IPAddress> GetTraceRoute(string hostNameOrAddress, int ttl)
            {
                Ping pinger = new Ping();
                PingOptions pingerOptions = new PingOptions(ttl, true);
                int timeout = 10000;
                byte[] buffer = Encoding.ASCII.GetBytes(Data);
                PingReply reply = default(PingReply);
    
                reply = pinger.Send(hostNameOrAddress, timeout, buffer, pingerOptions);
    
                List<IPAddress> result = new List<IPAddress>();
                if (reply.Status == IPStatus.Success)
                {
                    result.Add(reply.Address);
                }
                else if (reply.Status == IPStatus.TtlExpired || reply.Status == IPStatus.TimedOut)
                {
                    //add the currently returned address if an address was found with this TTL
                    if (reply.Status == IPStatus.TtlExpired) result.Add(reply.Address);
                    //recurse to get the next address...
                    IEnumerable<IPAddress> tempResult = default(IEnumerable<IPAddress>);
                    tempResult = GetTraceRoute(hostNameOrAddress, ttl + 1);
                    result.AddRange(tempResult);
                }
                else
                {
                    //failure 
                }
    
                return result;
            }

    quinta-feira, 2 de março de 2017 17:26