none
Pegar IP da Maquina RRS feed

  • Pergunta

  • Boa noite.

    Estou com um problema em um projeto que estou dando manutenção.

    Vamos lá.

    Existe uma rotina no sistema, onde o usuário e filial do usuário são carregados conforme o ip da maquina, sempre funcionou essa rotina e eu nunca precisei dar manutenção ou olhar ela a fundo (não fui eu que fiz), essa rotina é usada no projeto inteiro, o projeto é dividido em vários projetos, e cada projeto que o usuário abre, o sistema executa essa rotina.

    Conseguimos um novo cliente, que trabalha todos os usuários em um computador remoto (no mesmo computador remoto) e quando o sistema vai pegar o IP do usuário para verificar o nome e a filial, ele pega o IP do computador remoto, existe alguma forma de eu pegar o IP da maquina que o usuário esta acessando?

    Exemplo, eu acesso da minha maquina o computador remoto, e quando eu for pegar o IP, eu pegar da minha maquina em vez do computador remoto?

    Minha rotina é essa abaixo

     Public Function GetIPAddress() As String
            Dim sAddr As String
            Dim shostname As String
            shostname = GetHostName()
    
            'Dim IPHost As IPHostEntry = Dns.Resolve(shostname)
            Dim IPHost As IPHostEntry = Dns.GetHostEntry(shostname)
            Dim enderecos As IPAddress() = IPHost.AddressList
            sAddr = enderecos(0).ToString()
    
            GetIPAddress = sAddr
        End Function

    Public Function GetHostName() As String
            Dim shostname As String
            shostname = System.Net.Dns.GetHostName
            GetHostName = shostname
        End Function

    Obrigado desde já.

    terça-feira, 25 de agosto de 2015 03:21

Respostas

  • Segue o link do projeto.

    https://code.google.com/p/cassia/

    Um tempo atrás utilizei essa biblioteca para fazer um relatório no terminal services e não sei se mudou muito. De qualquer maneira acho que já ajuda.

    Para recuperar o IP você deve utilizar algo assim:

    ITerminalServicesManager manager = new TerminalServicesManager();

    ITerminalServicesSession session = manager.CurrentSession;

    Console.WriteLine("IP: " + session.ClientIPAddress);

    Código VB:

    Dim manager As ITerminalServicesManager = New TerminalServicesManager()
    
    Dim session As ITerminalServicesSession = manager.CurrentSession
    Console.WriteLine("IP: " + session.ClientIPAddress)


    ROBERTOSLJUNIOR


    • Editado robertosljunior terça-feira, 25 de agosto de 2015 03:58 Adicionado código VB.NET
    • Sugerido como Resposta robertosljunior quinta-feira, 27 de agosto de 2015 03:30
    • Marcado como Resposta Marcos SJ quinta-feira, 27 de agosto de 2015 14:12
    terça-feira, 25 de agosto de 2015 03:56
  • Da uma olhada nesse exemplo usando api WTSQuerySessionInformation

    Link


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    • Sugerido como Resposta Ricardo Barbosa Cortes quinta-feira, 27 de agosto de 2015 12:22
    • Marcado como Resposta Marcos SJ quinta-feira, 27 de agosto de 2015 14:12
    quarta-feira, 26 de agosto de 2015 02:27

Todas as Respostas

  • Você tem que pegar a sessão do usuário e assim consegue pegar o IP.

    Você tem que utilizar um wrapper para as interfaces da API do Remote Desktop.

    https://msdn.microsoft.com/en-us/library/aa383464(v=vs.85).aspx

    Utilize uma biblioteca que se chama Cassia, ela facilita muito a vida. Procure no Nuget.


    ROBERTOSLJUNIOR

    terça-feira, 25 de agosto de 2015 03:36
  • Obrigado pela resposta.

    Mas o Visual Studio que uso é o 2005

    terça-feira, 25 de agosto de 2015 03:43
  • Segue o link do projeto.

    https://code.google.com/p/cassia/

    Um tempo atrás utilizei essa biblioteca para fazer um relatório no terminal services e não sei se mudou muito. De qualquer maneira acho que já ajuda.

    Para recuperar o IP você deve utilizar algo assim:

    ITerminalServicesManager manager = new TerminalServicesManager();

    ITerminalServicesSession session = manager.CurrentSession;

    Console.WriteLine("IP: " + session.ClientIPAddress);

    Código VB:

    Dim manager As ITerminalServicesManager = New TerminalServicesManager()
    
    Dim session As ITerminalServicesSession = manager.CurrentSession
    Console.WriteLine("IP: " + session.ClientIPAddress)


    ROBERTOSLJUNIOR


    • Editado robertosljunior terça-feira, 25 de agosto de 2015 03:58 Adicionado código VB.NET
    • Sugerido como Resposta robertosljunior quinta-feira, 27 de agosto de 2015 03:30
    • Marcado como Resposta Marcos SJ quinta-feira, 27 de agosto de 2015 14:12
    terça-feira, 25 de agosto de 2015 03:56
  • É que na empresa utilizamos VS2005 e esta dando problema com a biblioteca.
    terça-feira, 25 de agosto de 2015 12:38
  • A biblioteca foi desenvolvida no framework 2.0.

    Qual o problema?


    ROBERTOSLJUNIOR

    terça-feira, 25 de agosto de 2015 13:34
  • Da uma olhada nesse exemplo usando api WTSQuerySessionInformation

    Link


    Bruno Ferreira de Souza
    MVP - Microsoft Valuable Professional
    MCTS .NET Framework - Windows Applications
    MCPD .NET Framework - Windows Applications
    www.maestrodotnet.com.br
    @BrunoMaestro

    • Sugerido como Resposta Ricardo Barbosa Cortes quinta-feira, 27 de agosto de 2015 12:22
    • Marcado como Resposta Marcos SJ quinta-feira, 27 de agosto de 2015 14:12
    quarta-feira, 26 de agosto de 2015 02:27