Eu tenho um programa em C # que faz exatamente isso. Eu tive um problema no Server 2008 R2 em que o log de eventos nem sempre listava os endereços IP do usuário (se eles estivessem conectados a partir dos clientes mais recentes da Área de Trabalho Remota). Alguns serviços implementam seu próprio provedor de verificação de credenciais que não fornece todas as informações que você deseja.
Para a Área de Trabalho Remota, descobri que entrar em "Configuração do Host de Sessão da Área de Trabalho Remota" e alterar a conexão RDP-TCP para ter a camada de segurança "RDP Security Layer" em vez de "Negociar" ou "SSL (TLS 1.0)" trouxe de volta os endereços IP.
Se você realmente quer fazer isso é outra pergunta para você: "Se você selecionar RDP Security Layer, não poderá usar a Autenticação no Nível da Rede."
A VPN deve gerar eventos semelhantes no Registro de segurança (descobri que o link é útil). Eu usei EventLogWatcher e vinculado a "* [System / EventID = 4625 ou System / EventID = 4624]" para que eu pudesse redefinir uma contagem incorreta no sucesso se o usuário realmente tivesse a senha errada. Também coloquei na lista de permissões :: 1, 0.0.0.0, 127.0.0.1 e "-".
Eu uso o Forefront TMG, então usei a API para adicionar endereços IP inválidos a um grupo de IPs dessa maneira e pedi à Cisco para adicionar acesso API a um dos roteadores SMB (o que eles me garantiram que talvez fizessem !)
Se você quiser usar o Firewall do Windows nativo para bloqueá-los, dê uma olhada na API para isso ("netsh advfirewall").