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 Design

Default.aspx dosyasının CodeFile’ında bulunan kodlarimizi paylaşalim,

  1. using System;
  2.  
  3. public partial class _Default : System.Web.UI.Page
  4. {
  5. protected void Page_Load(object sender, EventArgs e)
  6. {
  7. this.Title = "Trace Islemi";
  8. lnkTraceButton.PostBackUrl = "TraceResult.aspx";
  9. }
  10. }

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

TraceResult.aspx design

Bu sayfanın tasarimini tamamladiktan sonra, .cs dosyasının kodlarini paylaşalim

  1. using System;
  2. using System.Web.UI;
  3. using System.Web.UI.WebControls;
  4.  
  5. public partial class TraceResult : System.Web.UI.Page
  6. {
  7. Yonetim y;
  8. protected void Page_Load(object sender, EventArgs e)
  9. {
  10. this.Title = "Trace Islemi Sonuclari";
  11. if (PreviousPage != null)
  12. {
  13. TextBox txt = (TextBox)PreviousPage.FindControl("txtIPAdres");
  14. y = new Yonetim(txt.Text, this.plcKontrolHolder);
  15. PageAsyncTask task = new PageAsyncTask(y.Baslat, y.IslemBitir, null, null);
  16. Page.RegisterAsyncTask(task);
  17. }
  18. }
  19. protected void lnkTurnBack_Click(object sender, EventArgs e)
  20. {
  21. Response.Redirect("Default.aspx");
  22. }
  23. }

Islemleri yaptirdiğimiz ve nesne yönelimli mimari gereği , kullandığımı Yonetim sınıfımızın kodları :

  1. using System;
  2. using System.Web.UI.WebControls;
  3. using System.Collections.Generic;
  4. using System.Net;
  5. using System.IO;
  6.  
  7. public class Yonetim
  8. {
  9. public List<string> _IPYollari { get;set;}
  10. public string _IP {get;set;}
  11. Action _action;
  12. PlaceHolder _holder;
  13.  
  14. public Yonetim (string ip,PlaceHolder holder)
  15. {
  16. _IPYollari = new List<string>();
  17. this._IP = ip;
  18. _action = new Action(Islem);
  19. _holder = holder;
  20. }
  21.  
  22. public IAsyncResult Baslat(object sender, EventArgs e, AsyncCallback callBack, object state)
  23. {
  24. return _action.BeginInvoke(callBack, state);
  25. }
  26. void Islem()
  27. {
  28. _IPYollari.Clear();
  29. string _pageContent = string.Empty;
  30. try
  31. {
  32. WebRequest _request = WebRequest.Create(string.Format("http://www.ntua.gr/cgi-bin/rtracert?name={0}", this._IP));
  33. WebResponse _response = _request.GetResponse();
  34.  
  35. Stream _stream = _response.GetResponseStream();
  36. StreamReader _reader = new StreamReader(_stream);
  37.  
  38. _pageContent = _reader.ReadToEnd();
  39. if (_pageContent.Length < 1)
  40. return;
  41. }
  42. catch
  43. {
  44. return;
  45. }
  46. string icMetin = string.Empty;
  47. string metin = string.Empty;
  48.  
  49. for (int i = 0; i < _pageContent.Length - 4; i++)
  50. {
  51. metin += _pageContent[i]; // <
  52. metin += _pageContent[i + 1]; // p
  53. metin += _pageContent[i + 2]; // r
  54. metin += _pageContent[i + 3]; // e
  55. metin += _pageContent[i + 4]; // >
  56.  
  57. if (metin == "<pre>")
  58. {
  59. for (int k = i + 5; k < _pageContent.Length; k++)
  60. {
  61. 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>")
  62. {
  63. break;
  64. }
  65. else
  66. icMetin += _pageContent[k];
  67. }
  68. // veriler alindi
  69. break;
  70. }
  71. else
  72. {
  73. metin = string.Empty;
  74. }
  75. }
  76.  
  77. for (int i = 0; i < icMetin.Length; i++)
  78. {
  79. if (char.IsNumber(icMetin[i]) && (icMetin[i + 1].ToString() + icMetin[i + 2].ToString()) == "  ")
  80. {
  81. string adres = string.Empty;
  82. for (int k = i + 3; ; k++)
  83. {
  84. if (icMetin[k].ToString() != " ")
  85. adres += icMetin[k].ToString();
  86. else
  87. break;
  88. }
  89. _IPYollari.Add(adres);
  90. }
  91. }
  92.  
  93. if (this._IPYollari.Count > 0)
  94. {
  95. ListBox lst = new ListBox();
  96. lst.Height = 500;
  97. foreach (string item in this._IPYollari)
  98. lst.Items.Add(new ListItem(item));
  99.  
  100. this._holder.Controls.Add(lst);
  101. }
  102. else
  103. {
  104. Label lbl = new Label();
  105. lbl.Text = "Sonuc Yok";
  106. this._holder.Controls.Add(lbl);
  107. }
  108. }
  109. public void IslemBitir(IAsyncResult ra)
  110. {
  111. _action.EndInvoke(ra);
  112. }
  113. }

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

IP Trace Starting

Islem Sonuclari

Trace Results...

Trace Results...

Leave a Reply

You must be logged in to post a comment.