ASP.NET Async IP Trace Tutorial
Can sıkıntısına , ilginç şeyler çıkmaya görsün , oturup yazdırıyor kendini (: , sağlik olsun.. Gelelim bu yazımızın girişine , ve neler yapacağimiza , IP , malumunuz tüm internete bağlı olan bilgisayarin ortak özelliklerinden bir tanesi ve herkes internet sağlayicisi ve çeşitli vasitalar ile dünyanın dört bir yanındaki diğer bilgisayarlara ( user , server ) bağlanabiliyor,bu işlem için her bilgisayar kendi IP’si ile yollar izleyerek istenilen hedefe ulasmaktadir,bu ulaşim boyunca birden cok durağı geçer.. Bizde bu yazımızda örnek bir IP adresi bilgisi üzerinden , o adrese uygulamamizin ulaşırken geçecek yollari listeleteceğiz , bilgisayarımızda bulunan tracert.exe ile bu işlem gerçekleştirilebilir fakat , network üzerinde yürüyen işlemler olduğundan güclü bağlantılar gerekmektedir , bu tür bir bağlantıyı da nedense güzel Türkiye’mde değilde ancak yunanistan teknik üniversitesinde bulabildim bu işlem için , sağolsunlar onların gençlerine açmişlar bu imkanlari …
Ilk önce bir Web Site açalim , ve Default.aspx dosyamızın tasarimini gördüğümüz gibi yapalim

Default.aspx Design
Default.aspx dosyasının CodeFile’ında bulunan kodlarimizi paylaşalim,
-
using System;
-
-
public partial class _Default : System.Web.UI.Page
-
{
-
protected void Page_Load(object sender, EventArgs e)
-
{
-
this.Title = "Trace Islemi";
-
lnkTraceButton.PostBackUrl = "TraceResult.aspx";
-
}
-
}
Sıra geldi şimdi bizim için , TraceResult.aspx adini verdiğimiz , sonucları göreceğimiz ve işlemleri yaptiracağimiz olan asp.net sayfamıza , tasarimi aşağıda görüldüğü gibidir…

TraceResult.aspx design
Bu sayfanın tasarimini tamamladiktan sonra, .cs dosyasının kodlarini paylaşalim
-
using System;
-
using System.Web.UI;
-
using System.Web.UI.WebControls;
-
-
public partial class TraceResult : System.Web.UI.Page
-
{
-
Yonetim y;
-
protected void Page_Load(object sender, EventArgs e)
-
{
-
this.Title = "Trace Islemi Sonuclari";
-
if (PreviousPage != null)
-
{
-
TextBox txt = (TextBox)PreviousPage.FindControl("txtIPAdres");
-
Page.RegisterAsyncTask(task);
-
}
-
}
-
protected void lnkTurnBack_Click(object sender, EventArgs e)
-
{
-
Response.Redirect("Default.aspx");
-
}
-
}
Islemleri yaptirdiğimiz ve nesne yönelimli mimari gereği , kullandığımı Yonetim sınıfımızın kodları :
-
using System;
-
using System.Web.UI.WebControls;
-
using System.Collections.Generic;
-
using System.Net;
-
using System.IO;
-
-
public class Yonetim
-
{
-
public List<string> _IPYollari { get;set;}
-
public string _IP {get;set;}
-
Action _action;
-
PlaceHolder _holder;
-
-
public Yonetim (string ip,PlaceHolder holder)
-
{
-
this._IP = ip;
-
_holder = holder;
-
}
-
-
public IAsyncResult Baslat(object sender, EventArgs e, AsyncCallback callBack, object state)
-
{
-
return _action.BeginInvoke(callBack, state);
-
}
-
void Islem()
-
{
-
_IPYollari.Clear();
-
string _pageContent = string.Empty;
-
try
-
{
-
WebRequest _request = WebRequest.Create(string.Format("http://www.ntua.gr/cgi-bin/rtracert?name={0}", this._IP));
-
WebResponse _response = _request.GetResponse();
-
-
Stream _stream = _response.GetResponseStream();
-
-
_pageContent = _reader.ReadToEnd();
-
if (_pageContent.Length < 1)
-
return;
-
}
-
catch
-
{
-
return;
-
}
-
string icMetin = string.Empty;
-
string metin = string.Empty;
-
-
for (int i = 0; i < _pageContent.Length - 4; i++)
-
{
-
metin += _pageContent[i]; // <
-
metin += _pageContent[i + 1]; // p
-
metin += _pageContent[i + 2]; // r
-
metin += _pageContent[i + 3]; // e
-
metin += _pageContent[i + 4]; // >
-
-
if (metin == "<pre>")
-
{
-
for (int k = i + 5; k < _pageContent.Length; k++)
-
{
-
if ((_pageContent[k].ToString() + _pageContent[k + 1].ToString() + _pageContent[k + 2].ToString() + _pageContent[k + 3].ToString() + _pageContent[k + 4].ToString() + _pageContent[k + 5].ToString()) == "</pre>")
-
{
-
break;
-
}
-
else
-
icMetin += _pageContent[k];
-
}
-
// veriler alindi
-
break;
-
}
-
else
-
{
-
metin = string.Empty;
-
}
-
}
-
-
for (int i = 0; i < icMetin.Length; i++)
-
{
-
if (char.IsNumber(icMetin[i]) && (icMetin[i + 1].ToString() + icMetin[i + 2].ToString()) == " ")
-
{
-
string adres = string.Empty;
-
for (int k = i + 3; ; k++)
-
{
-
if (icMetin[k].ToString() != " ")
-
adres += icMetin[k].ToString();
-
else
-
break;
-
}
-
_IPYollari.Add(adres);
-
}
-
}
-
-
if (this._IPYollari.Count > 0)
-
{
-
lst.Height = 500;
-
foreach (string item in this._IPYollari)
-
-
this._holder.Controls.Add(lst);
-
}
-
else
-
{
-
lbl.Text = "Sonuc Yok";
-
this._holder.Controls.Add(lbl);
-
}
-
}
-
public void IslemBitir(IAsyncResult ra)
-
{
-
_action.EndInvoke(ra);
-
}
-
}
tüm bu hazırlıkların sonunda , Default.aspx sayfamızı ziyaret edelim ve bu sayfadan örnek bir IP değerini , Trace işlemine koyalim :

IP Trace Starting
Islem Sonuclari

Trace Results...