Tcpdump untuk melihat paket data di jaringan

Onno W. Purbo

Cara paling mudah mempelajari cara kerja jaringan komputer adalah dengan melihat paket data yang berseliweran di jaringan komputer. Terus terang, saya selama bertahun-tahun (tepatnya 8 tahun-an) belajar jaringan komputer dengan cara melihat isi paket data yang lewat di jaringan. Pada saat itu saya menggunakan jaringan paket radio pada kecepatan 1200bps jadi sangat lambat dan sangat mudah untuk melihat interaksi antar komputer  berprotokol TCP/IP menggunakan program Network Operating System (NOS) yang di jalankan di PC/XT di atas program DOS 3.3..

Pada saat ini teknologi telah berkembang, jarang sekali kita memperoleh PC/XT dengan DOS 3.3. Alternatif yang paling dekat adalah menjalankan program tcpdump di sistem operasi Linux.

Tidak banyak yang perlu anda siapkan untuk menjalakan kan tcpdump ini, yang pasti sebuah komputer kelas Pentium dengan Linux di dalamnya. Kemudian install software tcpdump, bisa dilakukan pada saat instalasi linux di lakukan atau menggunakan proses instalasi software Linux baik melalui RPM atau install file tar-nya. Software tcpdump sendiri biasanya sudah ada dalam distribusi Linux seperti Red Hat atau Mandrake, jika anda belum memilikinya atau tidak menemukannya, dapat di ambil di http://www.tcpdump.org.

Untuk menjalankan tcpdump anda harus menggunakan user root. Adapun sintaks untuk menjalankan tcpdump adalah sebagai berikut

tcpdump [ -adeflnNOpqRStuvxX ] [ -c count ] [ -C file_size ] [ -F file ]
[ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ]
[ -w file ] [ -E algo:secret ] [ expression ]

cara standard yang biasa saya gunakan untuk menjalankan tcpdump adalah

	# tcpdump –i eth0

atau

	# tcpdump –X –i eth0

Pada perintah yang pertama anda akan melihat semua header paket yang termonitor oleh interface eth0. Pada perintah yang ke dua, selain header paket akan di tampilkan isi data yang di bawa dalam paket yang termonitor oleh interface eth0 baik dalam bentuk binary (hexadesimal) maupun dalam bentuk ASCII. Tentunya teknik yang ke dua akan berbahaya karena anda dapat dengan mudah membaca semua username & password user di jaringan anda yang lewat di LAN, integritas moral seorang hacker akan sangat menentukan apakah informasi yang di peroleh akan digunakan untuk kebaikan atau keburukan.

Dengan ke dua cara di atas, jangan kaget kalau layar monitor anda akan dipenuhi print out paket yang lewat & akan scrolling dalam waktu yang sangat cepat. Bagi anda yang menggunakan tcpdump untuk memonitor kegiatan di ppp0 (internet dial-up) maupun Wireless LAN mungkin scrolling di layar tidak akan se dramatis jika anda memonitor trafik di LAN.

Untuk mengatasi kecepatan scrolling yang demikian gila-nya, ada baiknya kita melakukan sedikit pemrograman untuk memfilter paket agar hanya paket tertentu saja yang di tampilkan di layar. Pemrogramman tcpdump tidak sukar, seluruh parameter yang digunakan dapat di tambahkan melalui sebuah file dan di injeksikan ke tcpdump melalui parameter –F, sepert,

	# tcpdump –i eth0 –F nama-file-filter

nama-file-filter berisi parameter / teknik pemfilteran yang digunakan agar hanya segelintir paket yang sesuai dengan kehendak kita yang akan di tampilkan di layar.

Tentunya bagi anda yang ingin menangkap paket yang lewat dalam jumlah besar ada baiknya di simpan langsung ke file, untuk kemudian di analisa. Untuk menyimpan langsung hasil tangkapan paket ke file dalam menggunakan parameter –w, seperti,

	# tcpdump –i eth0 –w file-tangkapan-paket-data

semua paket yang lewat akan masuk ke file bernama file-tangkapan-paket-data, sedang untuk memainkan kembali hasil tangkapan tersebut, dapat dilakukan dengan menggunakan flag –b sebelum –w.

Contoh cuplikan hasil tcpdump yang saya lakukan pada interface eth0 yang berupa jaringan wireless LAN untuk akses ke Internet di daerah Jakarta Utara pada frekuensi 2.4GHz, terlihat sebagai berikut,

[root@gate onno]# tcpdump -X -i eth0
tcpdump: listening on eth0
20:13:19.539482 host251.ignore.net.5235 > 203.77.237.255.8859:  udp 10
0x0000   4500 0026 b6c6 0000 ff11 9269 cb4d edfb        E..&.......i.M..
0x0010   cb4d edff 1473 229b 0012 df09 4845 4152        .M...s".....HEAR
0x0020   5442 4541 5400 4006 0400 4a02 7172 0000        TBEAT.@...J.qr..
0x0030   78bf a840 1400                                 x..@..
20:13:20.539467 802.1d config 8000.00:03:e3:80:cb:09.8001 root 8000.00:03:e3:80:cb:09 pathcost 0 age 0 max 20 hello 2 fdelay 15
0x0000   4242 0300 0000 0000 8000 0003 e380 cb09        BB..............
0x0010   0000 0000 8000 0003 e380 cb09 8001 0000        ................
0x0020   1400 0200 0f00 0000 0000 0000 0000             ..............
20:13:22.149482 host145.ignore.net > host24.mcast.net:  ip-proto-88 40 [tos 0xc0]
0x0000   45c0 003c 0000 0000 0258 1ec1 cb4d ed91        E..<.....X...M..
0x0010   e000 000a 0205 ee6c 0000 0000 0000 0000        .......l........
0x0020   0000 0000 0000 0064 0001 000c 0100 0100        .......d........
0x0030   0000 000f 0004 0008 0c01 0101 0010 0000        ................
0x0040   0100 0000                                      ....
20:13:22.749478 arp who-has host163.ignore.net tell host164.ignore.net
0x0000   0001 0800 0604 0001 0000 21f7 c659 cb4d        ..........!..Y.M
0x0010   eda4 0000 0000 0000 cb4d eda3 2020 2020        .........M......
0x0020   2020 2020 2020 2020 2020 2020 2020 0100        ................
0x0030   0000 000f 0004                                 ......
20:13:22.819484 203.77.237.252.netbios-ns > 203.77.237.255.netbios-ns:
>>> NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
0x0000   4500 004e 25ae 0000 8011 a259 cb4d edfc        E..N%......Y.M..
0x0010   cb4d edff 0089 0089 003a 53ec ac6c 0110        .M.......:S..l..
0x0020   0001 0000 0000 0000 2046 4545 4a45 4e45        .........FEEJENE
0x0030   4646 4b45 5045 4f45 4643 4143 4143 4143        FFKEPEOEFCACACAC
0x0040   4143 4143 4143 4142 4c00 0020 0001 0a08        ACACACABL.......
0x0050   6865                                           he
20:13:22.819674
>>> NetBeui Packet
Type=0x3 Length=44 (0x2c) Signature=0xEFFF Command=0x8
NetbiosDataGram:
Destination=TIMEZONE        NameType=0x1B (Domain Controller)
Source=PROXY           NameType=0x00 (Workstation)

SMB PACKET: SMBtrans (REQUEST)

0x0000   f0f0 032c 00ff ef08 0000 0000 0000 0054        ...,...........T
0x0010   494d 455a 4f4e 4520 2020 2020 2020 1b50        IMEZONE........P
0x0020   524f 5859 2020 2020 2020 2020 2020 00ff        ROXY............
0x0030   534d 4225 0000 0000 1803 0000 0000 0000        SMB%............
0x0040   0000 0000 0000 0000 00fe ca00 0000 0011        ................
0x0050   0000                                           ..
20:13:22.828100 gate.yc1dav.ampr.org.1190 > ns1.indo.net.id.domain:  50267+ PTR? 252.237.77.203.in-addr.arpa. (45) (DF)
0x0000   4500 0049 12a0 4000 4011 0448 c0a8 7872        E..I..@.@..H..xr
0x0010   ca9f 2002 04a6 0035 0035 b844 c45b 0100        .......5.5.D.[..
0x0020   0001 0000 0000 0000 0332 3532 0332 3337        .........252.237
0x0030   0237 3703 3230 3307 696e 2d61 6464 7204        .77.203.in-addr.
0x0040   6172 7061 0000 0c00 01                         arpa.....
20:13:22.849461 arp who-has gate.yc1dav.ampr.org tell sumaryo.gate.net
0x0000   0001 0800 0604 0001 0010 5a63 fd7a c0a8        ..........Zc.z..
0x0010   7801 0000 0000 0000 c0a8 7872 0000 0000        x.........xr....
0x0020   0000 0000 0000 0000 0000 0000 0000 4e45        ..............NE
0x0030   4646 4b45 5045                                 FFKEPE
20:13:22.849643 arp reply gate.yc1dav.ampr.org is-at 0:0:f0:64:96:ae
0x0000   0001 0800 0604 0002 0000 f064 96ae c0a8        ...........d....
0x0010   7872 0010 5a63 fd7a c0a8 7801                  xr..Zc.z..x.
20:13:22.859513 ns1.indo.net.id.domain > gate.yc1dav.ampr.org.1190:  50267 NXDomain 0/1/0 (133) (DF)
0x0000   4500 00a1 0000 4000 3811 1e90 ca9f 2002        E.....@.8.......
0x0010   c0a8 7872 0035 04a6 008d 17ae c45b 8183        ..xr.5.......[..
0x0020   0001 0000 0001 0000 0332 3532 0332 3337        .........252.237
0x0030   0237 3703 3230 3307 696e 2d61 6464 7204        .77.203.in-addr.
0x0040   6172 7061 0000 0c00 01c0 1400 0600 0100        arpa............
0x0050   0027                                           .'

41 packets received by filter
0 packets dropped by kernel

Bagi anda yang belum terbiasa kemungkinan akan cukup pusing membaca demikian banyak data yang lewat, secara umum,

•	paket pertama yang ada dalam hasil tangkapan ini berisi paket broadcast ke alamat 203.77.237.255 port 8859  berisi message HEARTBEAT, entah untuk apa ini dilakukan.
•	Paket ke dua berisi informasi routing dari salah satu base station menggunakan protokol IEEE 802.11b yang bekerja di frekuensi 2.4GHz.
•	Paket ke tiga menandakan bahwa mesin tersebut dapat melakukan servis multicast, yang beralamat pada 224.0.0.24.
•	Paket ke empat berisi protokol Address Resolution Protocol (ARP) dan menanyakan hardware address salah satu mesin di jaringan.
•	Paket ke lima berisi protokol SMB yang digunakan dalam Network Neighbourhood di Windows. Node 203.77.237.252 menanyakan apakah ada node SMB lain di jaringan.
•	Paket ke enam berisi permohonan untuk menanyakan domain name dari mesin penulis gate.yc1dav.ampr.org ke mesin ns1.indo.net.id.
•	Dst ..

Terlihat sekali operasional sebuah jaringan komputer seperti Internet sangatlah kompleks dan melibatkan banyak sekali tata cara komunikasi (protokol). Keterangan lengkap tentang cara kerja protokol-protokol ini dapat di download secara gratis di berbagai situs di Internet terutama di Internet Engineering Task Force (IETF) http://www.ietf.org.

Tentunya membaca sekian banyak header cukup membuat kepala pusing, bagi anda yang ingin melihat proses interaksi yang berlangsung tanpa melihat isi message yang di transaksikan dapat menggunakan tcpdump –i saja seperti terlihat di tampilan selanjutnya.

[root@gate onno]# tcpdump -i eth0
tcpdump: listening on eth0
20:13:44.699472 802.1d config 8000.00:03:e3:80:cb:09.8001 root 8000.00:03:e3:80:cb:09 pathcost 0 age 0 max 20 hello 2 fdelay 15
20:13:45.239465 arp who-has host163.ignore.net tell host164.ignore.net
20:13:45.259470 host145.ignore.net > host24.mcast.net:  ip-proto-88 40 [tos 0xc0]
20:13:46.409466 host232.sumaryo.gate.net.4488 > 192.168.120.255.8859:  udp 10
20:13:46.719462 802.1d config 8000.00:03:e3:80:cb:09.8001 root 8000.00:03:e3:80:cb:09 pathcost 0 age 0 max 20 hello 2 fdelay 15
20:13:48.729463 802.1d config 8000.00:03:e3:80:cb:09.8001 root 8000.00:03:e3:80:cb:09 pathcost 0 age 0 max 20 hello 2 fdelay 15
20:13:49.739471 arp who-has host163.ignore.net tell host164.ignore.net
20:13:49.859466 host145.ignore.net > host24.mcast.net:  ip-proto-88 40 [tos 0xc0]
20:13:50.739465 802.1d config 8000.00:03:e3:80:cb:09.8001 root 8000.00:03:e3:80:cb:09 pathcost 0 age 0 max 20 hello 2 fdelay 15
20:13:51.999468
>>> NetBeui Packet
Type=0x3 Length=44 (0x2c) Signature=0xEFFF Command=0xA
NameQuery:
SessionNumber=0xD
NameType=0x0
ResponseCorrelator=0xD
Destination=15              NameType=0x20 (Server)
Source=SERVER          NameType=0x00 (Workstation)
20:13:53.859461 arp who-has 203.77.237.172 tell host161.ignore.net
20:13:53.867775 gate.yc1dav.ampr.org.1190 > ns1.indo.net.id.domain:  4214+ PTR? 172.237.77.203.in-addr.arpa. (45) (DF)
20:13:53.889518 ns1.indo.net.id.domain > gate.yc1dav.ampr.org.1190:  4214 NXDomain 0/1/0 (133) (DF)
 
44 packets received by filter
0 packets dropped by kernel
[root@gate onno]#

Tampak pada tampilan hanya header paket data yang lewat yang di tampilkan tanpa isi (payload) paket. Masing-masing jenis protokol akan memberikan tampilan header yang berbeda, detail tentang informasi yang di kandung dalam print out header tersebut dapat dibaca di manual tcpdump yang bisa di ambil di www.tcpdump.org atau di Linux pada

	$ man tcpdump

[root@gate onno]# tcpdump -i eth1
tcpdump: listening on eth1
20:31:36.462156
>>> NetBeui Packet
Type=0x406C Length=14 (0xe) Signature=0xEFFF Command=0x14
NetbiosDataAck:
TransmitCorrelator=0x28
RemoteSessionNumber=0xB
LocalSessionNumber=0xE

20:31:36.464914
>>> NetBeui Packet
Type=0x406E Length=14 (0xe) Signature=0xEFFF Command=0x15
Unknown Netbios Command Data: (9 bytes)
[000] 04 00 00 00 00 28 00 0B  0E                       .....(.. .

SMB PACKET: SMBwritebraw (REQUEST)

20:31:36.466129
>>> NetBeui Packet
Type=0x4070 Length=14 (0xe) Signature=0xEFFF Command=0x16
NetbiosDataOnlyLast:
Flags=PIGGYBACK_ACK_ALLOWED
ResyncIndicator=0x0
ResponseCorelator=0x28
RemoteSessionNumber=0xB
LocalSessionNumber=0xE

20:31:36.470069
>>> NetBeui Packet
Type=0x7240 Length=14 (0xe) Signature=0xEFFF Command=0x16
NetbiosDataOnlyLast:
Flags=PIGGYBACK_ACK_ALLOWED PIGGYBACK_ACK_INCLUDED
ResyncIndicator=0x0
ResponseCorelator=0x28
RemoteSessionNumber=0xE
LocalSessionNumber=0xB

SMB PACKET: SMBwritebraw (REPLY)

Berbeda dengan sebelumnya pada tampilan berikutnya adalah hasil tangkapan paket data yang lewat di eth1 (bukan eth0), eth1 merupakan interface LAN yang tersambung ke jaringan lokal di rumah. Kebanyakan trafik yang lewat adalah trafik transfer file antar komputer menggunakan network neighbourhood di Windows. Terlihat jelas sekali praktis di dominasi oleh paket-paket SMB atau NetBeui.

Untuk memfilter sekian banyak paket yang lewat ada baiknya kita membuat file teks berisi parameter untuk filtering yang dapat di jalankan menggunakan perintah

	# tcpdump –i eth0 –F nama-file-filter

beberapa contoh perintah yang dapat di isikan dalam ‘nama-file-filter’, untuk memudahkan saya coba terjemahkan beberapa contoh yang anda dalam manual tcpdump ke bahasa indonesia.

•	Untuk melihat semua paket yang dapat & pergi dari mesin sundown, gunakan perintah:
tcpdump host sundown

•	Untuk melihat semua trafik di mesin helios dengan mesin hot atau ace, gunakan perintah:
tcpdump host helios and \( hot or ace \)

•	Untuk melihat semua paket antara mesin ace dengan semua mesin, kecuali mesin helios, gunakan perintah:
       		tcpdump ip host ace and not helios

•	Untuk melihat semua trafik di mesin lokal pada jaringan (net) berkeley, gunakan perintah:
tcpdump net ucb-ether

•	Untuk melihat semua trafik ftp melalui internet gateway snup, gunakan perintah berikut (perlu dicatat tanda kutip digunakan agar shell tidak salah interpretasi tanpa kurung):
tcpdump 'gateway snup and (port ftp or ftp-data)'

•	Untuk melihat trafic yang sumber atau tujuannya bukan ke mesin lokal network, gunakan perintah:
tcpdump ip and not net localnet

•	Untuk melihat paket start & stop (SYN & FIN paket) dalam setiap hubungan TCP yang dilakukan dengan mesin non-lokal, gunakan perintah:
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'

•	Untuk melihat paket IP yang panjang-nya lebih dari 576 byte yang dikirim melalui gateway snup, gunakan perintah:
tcpdump 'gateway snup and ip[2:2] > 576'

•	Untuk melihat paket IP broadcast atau multicast yang tidak dikirim melalui ethernet broadcast atau multicast, gunakan perintah:
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'

•	Untuk melihat semua paket ICMP yang bukan ping, gunakan perintah:
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

Untuk benar-benar mengerti makna dari masing-masing perintah sangat di sarankan untuk mempelajari header & cara kerja protokol TCP, IP, ICMP, UDP dll. Naskah yang mendeskripsikan kerja masing-masing protokol tersebut dapat di ambil di http://www.ietf.org di kenal dengan Request For Comment (RFC).