Pergunta

Estamos monitorando as estatísticas de uso de uma interface de rede usando NetworkInterface.GetIPv4Statistics () no .NET 2.0. Isso não está relatando estatísticas corretas para ligações sobre as quais o tráfego VPN está sendo encapsulados. Em vez disso - no caso do cliente Cisco VPN -. Uso é apenas atribuída a uma nova interface de rede que apenas se parece com uma conexão Ethernet

próprio Windows (Vista, pelo menos) adiciona as estatísticas de VPN para a interface física real corretamente, para visualizar a caixa de diálogo 'Status' para os shows de conexão originais as contagens de bytes corretos. No entanto, os resultados da chamada em .NET não mesclar o tráfego juntos.

Existe uma maneira de associar a conexão de volta VPN para a conexão de rede sobre a qual ele está sendo túnel? Falhando isso, alguém sabe qual API está sendo usado pela caixa de diálogo de status para recuperar estatísticas corretas?

No momento nós estamos tendo para detectar manualmente conexões que parecem que estão VPNs e adicionar o seu uso para qualquer outra conexão está ativa, e isso não parece ser uma solução robusta.

Foi útil?

Solução 3

Como Rob sugere, as mentiras resposta dentro de WMI. Win32_PerfFormattedData_RemoteAccess_RasPort parece ser exatamente o que o Windows utiliza-se - os números são os mesmos, byte a byte, se o VPN é se ou não

.

Eu testei com:

static class Program
{
    static void Main()
    {
        var query = new WqlEventQuery("__InstanceModificationEvent", TimeSpan.FromSeconds(1),
                                      "TargetInstance ISA 'Win32_PerfFormattedData_RemoteAccess_RasPort' AND TargetInstance.BytesReceived > 0");

        var watcher = new ManagementEventWatcher(query);
        watcher.EventArrived += EventArrived;
        watcher.Start();

        Console.ReadLine();
    }

    static void EventArrived(object sender, EventArrivedEventArgs e)
    {
        var mo = e.NewEvent["TargetInstance"] as ManagementBaseObject;
        Console.WriteLine("{0:#,0}: {1:#,0} bytes sent, {2:#,0} bytes received", mo["Name"], mo["BytesTransmitted"], mo["BytesReceived"]);
    }
}

Outras dicas

Aqui está um programa escrito em Delphi (com fonte completo e explicação) que irá ajudá-lo a informações de rede de coleta, incluindo dados de VPN. Isso é usar o open-source componentes Indy , que também está disponível para uso com C #.

Eu sugiro a navegação através da fonte, e você vai encontrar exatamente o API do Windows chama que faz. Ele depende muito do IP Helper API ( IPHlpApi ).

Se você está procurando C # apenas exemplos, eu sugiro fazer algumas google-ing para "C # e IpHlpApi".

Saudações

alt texto http: //z.about .com / d / Delphi / 1/0 / K / 2 / 112903_2.gif

Vou ter que verificar quando eu começar a trabalhar para ver o que meus configuração aparência semelhante.

Uma coisa que a Cisco VPN faz é, se configurado, impossibilitando a divisão de túnel. O que isto significa é que você está impedido de acessar sua rede local na conexão que está conectado à VPN.

A maneira que eu posso ver isso, é quando minha conexão ethernet é configurada com um endereço IP, mas não tem um gateway padrão.

Supondo que você identificar a conexão VPN, essa conexão gateway menos seria a sua outra conexão.

Além disso, você já olhou para as classes WMI. Cisco VPN podem interagir com uma classe WMI talvez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top