Minggu, 08 April 2012

Keamanan Sistem Informasi – Pengertian, Proses & Fungsi Traceroute Serta Implementasinya dalam Delphi

Pengertian Traceroute

Traceroute (Tracert) adalah perintah untuk menunjukkan rute yang dilewati paket untuk mencapai tujuan. Ini dilakukan dengan mengirim pesan Internet Control Message Protocol (ICMP) Echo Request Ke tujuan dengan nilai Time to Live yang semakin meningkat. Rute yang ditampilkan adalah daftar interface router (yang paling dekat dengan host) yang terdapat pada jalur antara host dan tujuan.

Proses Traceroute

Proses Traceroute
Proses Traceroute
Untuk mengetahui jalur yang ditempuh untuk mencapai suatu node, traceroute mengirimkan 3 buah paket probe tipe UDP dari port sumber berbeda, dengan TTL bernilai 1. Saat paket tersebut mencapai router next-hop, TTL paket akan dikurangi satu sehingga menjadi 0, dan router next-hop akan menolak paket UDP tersebut sembari mengirimkan paket ICMP Time-to-Live Exceeded ke node asal traceroute tersebut. Dengan cara ini, pengirim traceroute tahu alamat IP pertama dari jalur yang ditempuh.

Kemudian, sumber traceroute mengirimkan 3 buah paket UDP lagi dengan nilai TTL yang dinaikkan 1 (TTL = 2), sehingga router pertama di jalur menuju tujuan traceroute akan melewatkan paket UDP tersebut ke router selanjutnya. Router hop kedua akan melihat bahwa paket tersebut sudah expired (TTLnya jadi 1, setelah dikurangi oleh router pertama). Maka, seperti halnya router pertama, router tersebut akan mengirimkan paket ICMP Time-to-Live Exceeded ke sumber traceroute. Sekarang, sumber traceroute telah mengetahui hop kedua dari jalur menuju tujuan traceroute.
Sumber traceroute akan mengirimkan lagi paket UDP dengan TTL ditambah 1 (TTL = 3). Router hop ketiga akan membalas dengan paket ICMP Time-to-Live Exceeded ke sumber traceroute, sehingga sumber traceroute mengetahui alamat IP router hop ketiga. Proses ini akan diulang terus paket UDP yang dikirimkan mencapai alamat IP tujuan traceroute. Tiga buah paket UDP traceroute adalah jumlah paket default dari aplikasi traceroute. Inilah mengapa kita melihat tiga buah tampilan latensi saat melihat hasil traceroute yang dijalankan.
Tidak semua aplikasi traceroute menggunakan UDP. Windows menggunakan paket ICMP, sedangkan sejumlah aplikasi tertentu menggunakan paket TCP.
Cara menghitung latensi tiap hop adalah dengan mengukur selisih antara timestamp paket probe yang dikirimkan dengan timestamp dari paket ICMP TTL exceeded yang diterima. Router yang berada sepanjang jalur pengiriman tidak akan melakukan pemrosesan data timestamp. Dari cara ini, yang kita ketahui hanyalah waktu total pulang-pergi dari sumber ke router hop tertentu. Delay yang terjadi sepanjang perjalanan kembali ke sumber juga akan berpengaruh.
Kemudian, alamat IP dari interface manakah yang kita lihat dari hasil traceroute?
traceroute ingress
traceroute ingress
Alamat IP yang kita lihat dari hasil traceroute adalah IP dari interface ingress router. Sebenarnya, RFC 1812 menyebutkan bahwa sumber ICMP haruslah dari interface egress. Namun, hal ini akan menyebabkan hasil traceroute menjadi kacau.

Traceroute pada Windows

Cara Melakukan Traceroute :
  1. Klik Start –> Run
  2. Setelah muncul pop up lalu anda tinggal ketikkan –> CMD
  3. Lalu munculah gambar seperti di bawah ini , kemudian anda  tinggal ketikkan –> tracert (spasi) namadomainanda

Interpretasi DNS dari Hasil Traceroute

Dengan traceroute, kita dapat menganalisis informasi mengenai lokasi router, tipe dan kapasitas interface, tipe dan fungsi router, serta batas-batas network yang dilalui, berdasarkan DNS interface yang dilalui. IUntuk lebih memperjelas, berikut ini adalah contoh hasil traceroute kewww.berkeley.edu:
$ traceroute www.berkeley.edu
traceroute to amber.Berkeley.EDU (128.32.25.12), 30 hops max, 40 byte packets
1 203.130.216.2 (203.130.216.2) 137 ms 151 ms 151 ms
2 203.130.216.1 (203.130.216.1) 151 ms 137 ms 138 ms
3 192.168.8.49 (192.168.8.49) 137 ms 151 ms 151 ms
4 S12-0-11.kbl.surabaya.telkom.net.id (202.134.3.45) 192 ms 151 ms 151 ms
5 FE0-0-gw3.cibinong.telkom.net.id (202.134.3.134) 165 ms 151 ms 151 ms
6 hssi-gw3.hk.telkom.net.id (202.134.3.1) 659 ms 659 ms 645 ms
7 202.130.129.61 (202.130.129.61) 645 ms 687 ms 659 ms
8 321.ATM5-0-0.XR1.HKG2.ALTER.NET (210.80.3.1) 645 ms 659 ms 645 ms
9 POS1-0-0.TR1.HKG2.Alter.Net (210.80.48.21) 672 ms 646 ms 645 ms
10 384.ATM4-0.IR1.LAX12.Alter.Net (210.80.50.189) 838 ms 796 ms 796 ms
11 137.39.31.222 (137.39.31.222) 810 ms 852 ms 810 ms
12 122.at-5-1-0.TR1.LAX9.ALTER.NET (152.63.10.237) 824 ms 810 ms 810 ms
13 297.at-1-0-0.XR1.LAX9.ALTER.NET (152.63.112.237) 824 ms 838 ms 824 ms
14 191.ATM6-0.BR1.LAX9.ALTER.NET (152.63.113.9) 837 ms 797 ms 810 ms
15 acr1-loopback.Anaheim.cw.net (208.172.34.61) 810 ms 1071 ms 782 ms
16 acr1-loopback.SanFranciscosfd.cw.net (206.24.210.61) 783 ms 810 ms 769 ms
17 BERK-7507--BERK.POS.calren2.net (198.32.249.69) 810 ms 1126 ms 796 ms
18 pos1-0.inr-000-eva.Berkeley.EDU (128.32.0.89) 796 ms 824 ms 796 ms
19 pos5-0-0.inr-001-eva.Berkeley.EDU (128.32.0.66) 796 ms 783 ms 783 ms
20 fast1-0-0.inr-007-eva.Berkeley.EDU (128.32.0.7) 810 ms 810 ms 797 ms
21 f8-0.inr-100-eva.Berkeley.EDU (128.32.235.100) 797 ms 782 ms 769 ms
22 amber.Berkeley.EDU (128.32.25.12) 796 ms 769 ms 810 msTraceroute akan menampilkan titik-titik perantara yang menjembatani anda dan titik tujuan anda, ‘jembatan’ inilah yang biasa disebut dengan router, data yang andakirimkan akan meloncat melewati jembatan-jembatan ini. Ada tiga buah waktu yang menunjukkan berapa waktu yang dibutuhkan oleh paket tersebut untuk berjalan dari komputer anda ke router.Untuk dapat memahami seluruh data yang dihasilkan oleh traceroute tersebut, kita harus memahami bagaimana cara traceroute bekerja.
Berikut ini adalah contoh yang lebih kompleks dengan melakukan traceroute ke finland:
% traceroute www.hut.fi
traceroute to info-e.hut.fi (130.233.224.28), 30 hops max, 40-byte packets
1 203.130.216.2 (203.130.216.2) 137 ms 124 ms 137 ms
2 203.130.216.1 (203.130.216.1) 137 ms 124 ms 124 ms
3 192.168.8.49 (192.168.8.49) 137 ms 151 ms 151 ms
4 S12-0-11.kbl.surabaya.telkom.net.id (202.134.3.45) 192 ms 151 ms 151 ms
5 FE0-0-gw3.cibinong.telkom.net.id (202.134.3.134) 164 ms 165 ms 151 ms
6 hssi-gw3.hk.telkom.net.id (202.134.3.1) 673 ms 645 ms 645 ms
7 202.130.129.61 (202.130.129.61) 659 ms 646 ms 659 ms
8 321.ATM5-0-0.XR1.HKG2.ALTER.NET (210.80.3.1) 659 ms 645 ms 659 ms
9 POS1-0-0.TR1.HKG2.Alter.Net (210.80.48.21) 659 ms 632 ms 659 ms
10 284.ATM6-0.IR1.SAC2.Alter.Net (210.80.50.1) 797 ms 823 ms 797 ms
11 POS2-0.IR1.SAC1.ALTER.NET (137.39.31.190) 796 ms 1566 ms 810 ms
12 122.at-6-1-0.TR1.LAX9.ALTER.NET (152.63.10.218) 838 ms 823 ms 824 ms
13 297.at-2-0-0.XR1.SAC1.ALTER.NET (152.63.50.133) 933 ms 824 ms 838 ms
14 185.ATM5-0.BR4.SAC1.ALTER.NET (152.63.52.201) 810 ms 824 ms 851 ms
15 137.39.52.86 (137.39.52.86) 810 ms 1071 ms 810 ms
16 sl-bb21-ana-15-0.sprintlink.net (144.232.1.173) 769 ms (ttl=246!) 796 ms (ttl=246!) 783 ms (ttl=246!)
17 sl-bb20-pen-8-0.sprintlink.net (144.232.18.45) 893 ms 851 ms (ttl=245!) 893 ms
18 sl-bb22-pen-11-0.sprintlink.net (144.232.18.78) 893 ms (ttl=244!) 879 ms (ttl=244!) 879 ms (ttl=244!)
19 sl-bb10-nyc-9-0.sprintlink.net (144.232.7.1) 865 ms 879 ms 879 ms
20 sl-bb10-nyc-10-0.sprintlink.net (144.232.13.158) 879 ms 892 ms 893 ms
21 gblon505-tc-p6-3.ebone.net (195.158.229.46) 865 ms 879 ms 920 ms
22 bebru204-tc-p5-0.ebone.net (195.158.232.42) 961 ms 948 ms 934 ms
23 nlams303-tc-p1-0.ebone.net (195.158.225.86) 962 ms 961 ms 934 ms
24 dedus205-tc-p8-0.ebone.net (213.174.70.133) 934 ms 961 ms 947 ms
25 dkcop204-tb-p3-0.ebone.net (213.174.71.50) 975 ms 975 ms *
26 * * *
27 ne-gw.nordu.net (195.158.226.86) 1002 ms 962 ms 1016 ms
28 hutnet-gw.csc.fi (128.214.248.65) 1027 ms (ttl=238!) 1040 ms (ttl=238!) 1026 ms (ttl=238!)
29 hutnet-gw.hut.fi (193.166.43.253) 1020 ms 1037 ms 1023 ms
30 info-e.hut.fi (130.233.224.28) 1091 ms (ttl=46!) 1027 ms (ttl=46!) 1067 ms (ttl=46!) 

Baris pertama hanya menunjukkan apa yang akan dilakukan oleh traceroute yaitu melakukan
trace ke host yang bernama info-e.hut.fi dengan maksimum loncatan 30 dan besar paket
yang dikirimkan adalah 40 byte.
Hasilnya, paket tersebut melewati 30 router atau 30 kali loncatan. Loncatan yang pertama sampai kelima hanya memakan waktu sekitar 100-200 mili detik adalah loncatan dari komputer penulis ke jaringan milik Telkomnet di Indonesia. Pada loncatan ke enam, waktu yang diperlukan meningkat banyak sekali menjadi sekitar 650 mili detik, ini dikarenakan loncatan tersebut memang jauh, yaitu dari stasiun bumi Telkomnet yang ada di Cibinong ke gateway milik Telkomnet yang ada di Hongkong. Kadang waktu yang diperlukan meningkat banyak sekali karena jarak yang jauh atau jaringan yang dilewati memang sedang padat. Anda harus mencurigai titik-titik dimana waktu yang diperlukan menjadi besar sekali. Jika hal ini terjadi, anda dapat mengeceknya dengan melakukan ping ke router tersebut beberapa kali untuk melihat apakah paket yang kita kirimkan di drop, atau apakah ada variasi waktu yang besar. Kemudian pada loncatan ke 16 sampai 18 anda melihat (ttl=246!) di sebelah kolom waktu. Ini adalah indikasi dari trceroute bahwa TTL yang kembali tidak sesuai dengan sewaktu dikirimkan ini menunjukkan adanya asymmetric path, yaitu router yang dilewati paketsewaktu berangkat tidak sesuai dengan router yang dilewati sewaktu paket tersebutkembali. Tetapi hal itu adalah normal.
Tanda asterik pada loncatan ke 25 dan 26 menandakan bahwa traceroute tidak menerima  respon dari komputer tersebut, pada loncatan ke 26 kemungkinan dikarenakan router  tersebut tidak mengirimkan paket ICMP, sedangkan pada loncatan ke 25 kemungkinan adalah hasil dari paket ICMP yang dikirimkan oleh router tersebut hilang di perjalanan karena suatu sebab.
Dikombinasikan dengan ping, traceroute menjadi alat analisa jaringan yang baik dengan  melihat loncatan mana yang memakan waktu yang besar atau paket yang di drop, kita dapat menentukan dimana titik kritisnya. Kemudian dengan melakukan ping pada titik tersebut dan satu titik sebelumnya, kita dapat menemukan masalah yang ada dalam jaringan.

Impelementasi Traceroute menggunakan Delphi

Desain Form
Form Traceroute
Form Traceroute
001unit fmTraceRouteMainU;
002
003interface
004
005uses
006  {$IFDEF Linux}
007  QGraphics, QControls, QForms, QDialogs, QStdCtrls, QComCtrls, QExtCtrls,
008  QActnList,
009  {$ELSE}
010  Windows, Messages, Graphics, Controls, Forms, Dialogs, ComCtrls, ActnList,
011  StdCtrls, Spin, ExtCtrls,
012  {$ENDIF}
013  SysUtils, Classes, IdBaseComponent, IdComponent, IdRawBase, IdRawClient, IdIcmpClient,
014  IdAntiFreezeBase, IdAntiFreeze;
015
016type
017  TfmTracertMain = class(TForm)
018    Panel1: TPanel;
019    Panel2: TPanel;
020    Panel3: TPanel;
021    Panel4: TPanel;
022    lbLog: TListBox;
023    Label1: TLabel;
024    Label2: TLabel;
025    ActionList1: TActionList;
026    edTarget: TEdit;
027    seMaxHops: TSpinEdit;
028    Button1: TButton;
029    acGo: TAction;
030    acResolve: TAction;
031    acPing: TAction;
032    acTrace: TAction;
033    lvTrace: TListView;
034    IdIcmpClient: TIdIcmpClient;
035    IdAntiFreeze1: TIdAntiFreeze;
036    Splitter1: TSplitter;
037    Button2: TButton;
038    acStop: TAction;
039    procedure edTargetChange(Sender: TObject);
040    procedure acResolveExecute(Sender: TObject);
041    procedure acGoExecute(Sender: TObject);
042    procedure acPingExecute(Sender: TObject);
043    procedure acTraceExecute(Sender: TObject);
044    procedure lvTraceCompare(Sender: TObject; Item1, Item2: TListItem;
045      Data: Integer; var Compare: Integer);
046    procedure acStopExecute(Sender: TObject);
047  private
048    { Private declarations }
049    bResolved: Boolean;
050    ResolvedHost: String;
051    Stopped: Boolean;
052    function PingHost(Host: string; TTL: Integer): boolean;
053    function FindItem(TTL: Integer; Add: boolean): TListItem;
054  public
055    { Public declarations }
056  end;
057
058var
059  fmTracertMain: TfmTracertMain;
060
061implementation
062
063uses idStack, IdException;
064{$IFDEF Linux}{$R *.xfm}{$ELSE}{$R *.DFM}{$ENDIF}
065
066procedure TfmTracertMain.edTargetChange(Sender: TObject);
067begin
068  bResolved := false;
069end;
070
071procedure TfmTracertMain.acResolveExecute(Sender: TObject);
072begin
073  bResolved := false;
074  lbLog.Items.Append(Format('resolving %s',[edTarget.text]));
075  try
076    Application.ProcessMessages;
077    ResolvedHost := gStack.WSGetHostByName(edTarget.text);
078    bResolved := true;
079    lbLog.Items.Append(format('%s resolved to %s',[edTarget.text, ResolvedHost]));
080  except
081    on e: EIdSocketError do
082      lbLog.Items.text  := lbLog.Items.text + e.message;
083  end;
084end;
085
086procedure TfmTracertMain.acGoExecute(Sender: TObject);
087var
088  saveCursor: TCursor;
089begin
090  saveCursor := Screen.Cursor;
091  Screen.Cursor := crHourGlass;
092  try
093      Stopped := false;
094      acGo.Enabled := false;
095      acStop.enabled := true;
096      acResolve.execute;
097      if bResolved and not stopped then
098      begin
099        acPing.execute;
100        if not stopped then
101          acTrace.Execute;
102      end;
103      acGo.Enabled := true;
104      acStop.enabled := false;
105  finally
106    Screen.Cursor := saveCursor;
107  end{ try/finally }
108end;
109
110function TfmTracertMain.PingHost(Host: string; TTL: Integer): Boolean;
111begin
112  result := false;
113  IdIcmpClient.Host := Host;
114  IdIcmpClient.TTL := TTL;
115  IdIcmpClient.ReceiveTimeout := 5000;
116  IdIcmpClient.Ping;
117  case IdIcmpClient.ReplyStatus.ReplyStatusType of
118    rsEcho:
119    begin
120      lbLog.Items.Append(format('response from host %s in %d millisec.',
121                                [
122                                IdIcmpClient.ReplyStatus.FromIpAddress,
123                                IdIcmpClient.ReplyStatus.MsRoundTripTime
124                                ]));
125      result := true;
126    end;
127    rsError:
128      lbLog.Items.Append('Unknown error.');
129    rsTimeOut:
130      lbLog.Items.Append('Timed out.');
131    rsErrorUnreachable:
132      lbLog.Items.Append(format('Host %s reports destination network unreachable.',
133                                [
134                                IdIcmpClient.ReplyStatus.FromIpAddress
135                                ]));
136    rsErrorTTLExceeded:
137      lbLog.Items.Append(format('Hope %d %s: TTL expired.',
138                                [
139                                IdIcmpClient.TTL,
140                                IdIcmpClient.ReplyStatus.FromIpAddress
141                                ]));
142  end; // case
143end;
144
145procedure TfmTracertMain.acPingExecute(Sender: TObject);
146begin
147  PingHost(ResolvedHost, seMaxHops.value);
148  Application.ProcessMessages;
149end;
150
151function TfmTracertMain.FindItem(TTL: Integer; Add: boolean): TListItem;
152var
153  i: Integer;
154begin
155  result := nil;
156  // Find the TTL item
157  if lvTrace.Items.Count < TTL Then
158  begin
159    for i := 0 to lvTrace.Items.Count - 1 do
160    begin
161      if StrToIntDef(lvTrace.Items[i].Caption, -1) = TTL then
162      begin
163        result := lvTrace.Items[i];
164        Break;
165      end;
166    end;
167  end;
168  if not assigned( result ) then
169  begin
170    // Not found, add it
171    result := lvTrace.Items.Add;
172    result.Caption := IntToStr(TTL);
173  end;
174end;
175
176procedure TfmTracertMain.acTraceExecute(Sender: TObject);
177var
178  TTL: Integer;
179  Reached: boolean;
180  aItem: TListItem;
181begin
182  TTL := 0;
183  reached := false;
184  lvTrace.Items.Clear;
185  repeat
186    inc(TTL);
187    IdIcmpClient.Host := ResolvedHost;
188    IdIcmpClient.TTL := TTL;
189    IdIcmpClient.ReceiveTimeout := 5000;
190    IdIcmpClient.Ping;
191    aItem := FindItem(TTL, True);
192    aItem.SubItems.Clear;
193    case IdIcmpClient.ReplyStatus.ReplyStatusType of
194      rsEcho:
195      begin
196        aItem.SubItems.Append(IdIcmpClient.ReplyStatus.FromIpAddress);
197        aItem.SubItems.Append(format('Reached in : %d ms', [IdIcmpClient.ReplyStatus.MsRoundTripTime]));
198        reached := true;
199      end;
200      rsError:
201      begin
202        aItem.SubItems.Append(IdIcmpClient.ReplyStatus.FromIpAddress);
203        aItem.SubItems.Append('Unknown error.');
204      end;
205      rsTimeOut:
206      begin
207        aItem.SubItems.Append('?.?.?.?');
208        aItem.SubItems.Append('Timed out.');
209      end;
210      rsErrorUnreachable:
211      begin
212        aItem.SubItems.Append(IdIcmpClient.ReplyStatus.FromIpAddress);
213        aItem.SubItems.Append(format('Destination network unreachable', [IdIcmpClient.ReplyStatus.MsRoundTripTime]));
214        break;
215      end;
216      rsErrorTTLExceeded:
217      begin
218        aItem.SubItems.Append(IdIcmpClient.ReplyStatus.FromIpAddress);
219        aItem.SubItems.Append(format('TTL=%d', [IdIcmpClient.ReplyStatus.TimeToLive]));
220      end;
221    end; // case
222    Application.ProcessMessages;
223  until reached or (TTL > seMaxHops.value) or Stopped;
224end;
225
226procedure TfmTracertMain.lvTraceCompare(Sender: TObject; Item1,
227  Item2: TListItem; Data: Integer; var Compare: Integer);
228begin
229  Compare := StrToIntDef(Item1.Caption, -1) - StrToIntDef(Item2.Caption, -1);
230end;
231
232procedure TfmTracertMain.acStopExecute(Sender: TObject);
233begin
234  Stopped := true;
235  acStop.enabled := false;
236end;
237
238end.

sumber
Read more »