ASP .NET - Como controlar os visitantes do seu site (C#)
Após você publicar o seu site ASP .NET na web você vai querer saber quem são os visitantes do site. Uma forma de fazer isso é consultar o o seu log de eventos no seu servidor host. Outra é você mesmo criar um código que faça este serviço registrando o que lhe interessa saber.
Em geral você vai querer obter o endereço IP e o nome DNS do visitante e também saber qual página que foi acessada. Então vejamos como podemos fazer isso usando a linguagem C# em uma aplicação ASP .NET.
O DNS (Domain Name
System - Sistema de Nomes de Domínios)
é um sistema de gerenciamento de nomes hierárquico e distribuído operando
segundo duas definições:
O endereço IP, de forma genérica, é um endereço que
indica o local de um nó em uma rede local ou pública. |
O objeto ServerVariables
Desde o tempo da Active Server Pages (ASP) podemos acessar o objeto chamado ServerVariables, que faz parte do objeto Request.
Principais funções do Objeto Request: request.form - Obtêm valores de variáveis enviadas via formulário pelo método post. request.QueryString - Recupera valores de variáveis enviadas via formulário pelo método get. request.servervariables - Recupera informações sobre o browser do usuário e sobre o servidor WEB. request.cookies - Obtêm informações do cookie do navegador do usuário request.ClientCertificate - Exibe informações sobre o certificado de segurança do usuário. Usado em sites com transmissão segura de dados (https) |
Este objeto permite ao programador obter informações sobre muitas variáveis de ambiente. Você pode usar o ServerVariables juntamente com opções de segurança do diretório IIS(Internet Information Service) para determinar quem está acessando seu site. Você também pode pegar o endereço IP do visitante usando o objeto ServerVariables.
A coleção ServerVariables contém toda a informação gerada quando da requisição de um serviço pelo navegador combinada com as variáveis do ambiente do servidor.
Sintaxe: Request.ServerVariables(variavel)
Variavel : especifica o nome das variáveis do ambiente do servidor a retornar
Geralmente lemos estas informações para obter informações sobre o servidor ou sobre o navegador.
Os membros mais importantes da coleção ServerVariables são:
|
A seguir temos um exemplo que exibe as variáveis do servidor da página : ASP 101 - Active Server Pages 101
LOCAL_ADDR | 11.4.82.10 |
PATH_INFO | /samples/servvars.aspx |
PATH_TRANSLATED | D:\Inetpub\WWWROOT\APSP01\ASP101\www\samples\servvars.aspx |
QUERY_STRING | |
REMOTE_ADDR | 192.44.5.243 |
REMOTE_HOST | 192.44.5.243 |
REMOTE_PORT | 41337 |
REQUEST_METHOD | GET |
SCRIPT_NAME | /samples/servvars.aspx |
SERVER_NAME | aspnet.asp101.com |
SERVER_PORT | 80 |
SERVER_PORT_SECURE | 0 |
SERVER_PROTOCOL | HTTP/1.0 |
SERVER_SOFTWARE | Microsoft-IIS/6.0 |
URL | /samples/servvars.aspx |
HTTP_CACHE_CONTROL | max-age=259200 |
HTTP_CONNECTION | keep-alive |
Apenas para mostrar a você como usar estas variáveis vamos criar um projeto ASP .NET usando o Visual Web Developer 2010 Express Edition com o nome getVariaveis;
No menu File-> New Project selecione o template : Visual C# -> Web -> ASP .NET Empty Web Appliacation e informe o nome getVariaveis;
A seguir inclua uma nova página com o nome Default.aspx a partir do menu Project-> Add New Item escolhendo o template Web Form e informando Default.aspx;
A seguir inclua uma tabela na página Default.aspx com, via menu Table-> Insert Table, com 7 linhas e 2 colunas ;
Em seguida inclua 5 controles Buttons e 5 Labels na tabela conforme o leiaute da figura abaixo:
Finalmente inclua o código abaixo no arquivo code-behind Default.aspx.cs:
using System; namespace getIP_Proxy { public partial class Default : System.Web.UI.Page { protected void btnIP_1_Click(object sender, EventArgs e) { lblIP1.Text = getEnderecoIP(); } protected void btn_IP2_Click(object sender, EventArgs e) { lblIP2.Text = getEnderecoIP(); } protected string getEnderecoIP() { string strEnderecoIP; strEnderecoIP = Request.ServerVariables ["HTTP_X_FORWARDED_FOR"]; if (strEnderecoIP == null) strEnderecoIP = Request.ServerVariables["REMOTE_ADDR"]; return strEnderecoIP; } protected void btnAll_Click(object sender, EventArgs e) { lblHttp.Text = Request.ServerVariables["ALL_RAW"]; } protected void btnServidor_Click(object sender, EventArgs e) { lblServidor.Text = Request.ServerVariables["SERVER_NAME"]; } } } |
Este código chama a
função getEnderecoIP() para o evento Click dos botões: bntIP1 e btnIP2 onde primeiro tentamos obter o endereço IP usando a variável HTTP_X_FORWARDED_FOR e se o valor for nulo então usamos variável de ambiente REMOTE_ADDR 1- Código para obter os cabeçalhos HTTP Request.ServerVariables["ALL_RAW"]; 2 - Código para obter o nome do servidor Request.ServerVariables["SERVER_NAME"]; |
Para obter o endereço IP usando ASP .NET e a linguagem C# podemos usar :
Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ou Request.ServerVariables["REMOT_ADDR"]
Mas qual a diferença ???
Se você estiver fazendo uma conexão via um servidor Proxy o método Request.ServerVariables["REMOT_ADDR"] irá retornar somente o endereço IP do servidor proxy e não o IP real da máquina do cliente. Para obter o endereço IP real do cliente via servidor proxy devemos usar : Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
Para obter o nome do DNS podemos usar :
Dns.GetHostEntry( string enderecoIP);
Onde estamos usando a classe Dns que fornece a funcionalidade de resolver um nome de domínio. O método GetHostEntry() retorna de forma assíncrona o endereço resolvido para o IP do host especificado;
Para obter o endereço da página requisitada podemos usar:
Request.Url.ToString();
O objeto Request permite obter informações sobre a URL da requisição atual.
Os objetos Response e Request ainda existem e podem usados em páginas ASP.NET. Estes objetos representam a informação chegando no servidor Web a partir do navegador(Request) e a informação saindo do servidor para o navegador(Response).
O objeto Request representa o objeto input e o objeto Response representa o objeto output.
Principais propriedades de Request:
Body:
Obtêm/Defube o corpo do request HTTP CodePage: Obtêm/Define o código da página para o corpo request. Headers: Obtêm a coleção de cabeçalho HTTP HTTPVersion: Obtêm/Define a versão HTTP Path: Obtêm/Define o caminho HTTP ResponseBufferSize: Obtêm/Define o tamanho do buffer usado para armazenar o corpo response. Verb: Obtêm/Define o método verb HTTP |
Após obter as informações basta gravá-las em um arquivo de log para consulta.
Abaixo temos um exemplo bem simples de como fazer isso onde incluímos no evento Load da página o código para obter as informações do visitante.
Obs: Uma outra opção seria usar o evento Application.BeginRequest do arquivo Global.asax
protected void Page_Load(object sender, EventArgs e) { string enderecoIP = getEnderecoIP(); string nomeHost = Dns.GetHostEntry(enderecoIP).HostName; StreamWriter wrtr = new StreamWriter(Server.MapPath("visitantes.log"), true); wrtr.WriteLine(DateTime.Now.ToString() + " | " + enderecoIP + " | " + nomeHost + " | " + Request.Url.ToString()); wrtr.Close(); } |
O código acima necessita dos namespace System.IO e System.Net pois estamos usando a classe StreamWriter para criar um arquivo e a classe Dns para obter o DNS.
No código acima estamos criando um arquivo texto chamado visitantes.log na raíz da aplicação e logando as informações de data, endereço ip, nome do host e página requisitada.
Após executarmos o projeto web obtemos o seguinte resultado verificando o arquivo visitantes.log que foi gravado no raiz da aplicação:
Pegue o projeto completo aqui: VariaveisServidor.zip
"O que era desde o princípio, o que ouvimos, o que vimos com os nossos olhos, o que contemplamos e as nossas mãos apalparam, a respeito do Verbo da vida(pois a vida foi manifestada, e nós a temos visto, e dela testificamos, e vos anunciamos a vida eterna, que estava com o Pai, e a nós foi manifestada);" 1 João 1:1-2Referências: