Python:Network packet sniffer
#1
[Image: 2zhfqfp.jpg]

Halo teman - teman ketemu lagi bersama penulis rahmat ramadhan aka jimmyromanticdevil . ok kali ini si penulis akan membahas tentang network packet sniffer . pada tutorial ini penulis akan mengunakan bahasa pemrogramman Python untuk code-code network packet sniffer dan OS linux untuk menjalankan codenya.tapi sebelum itu kita kenal dulu apa sebenarnya network packet sniffer itu .

First Theory/Teori pertama tentang Packet .
What is Network Packet sniffer / Apa sebenarnya Network packet sniffer itu ?
Anaglogy :
~ Ketika kita terkoneksi dengan internet,data tidak dikirim dalam satu aliran data yang berkelanjutan,ini akan menjadi tidak praktis dan itu akan membatasi kinerja jaringan internet.Untuk menjaga kinerja Internet semaksimal mungkin, data dipotong atau di iris. Seperti sepotong data (baik inbound atau outbound) disebut "paket".dan packet tidak dapat kalian lihat dengan mata telanjang . Mengirimkan informasi pada jaringan berarti mengirim "paket" data.nah analoginya Pikirkan mereka seperti atom. Banyaknya paket akan menciptakan informasi akhir yang akan kalian lihat pada layar kalian, baik itu website atau email. Untuk "melihat" atom kalian akan memerlukan perangkat khusus, beberapa jenis mikroskop elektron, untuk dapat melihat "paket" kalian sudah dikirim atau diterima.kalian juga membutuhkan perangkat khusus. Ini adalah tipe khusus dari program monitoring yang disebut.packet sniffer. Dengan menggunakan sebuah packet sniffer kalian dapat melihat informasi-informasi yang masuk atau terkirim dari komputer kalian.
Definisi :
~ NETWORK PACKET :
~ Paket jaringan atau network packet adalah satuan informasi dasar yang dapat ditransmisikan di atas jaringan atau melalui saluran komunikasi digital. Sebuah paket berisi packet header yang berisi informasi mengenai protokol tersebut (informasi mengenai type,source data, destination source,data,ip addres atau informasi lainnya), data yang hendak ditransmisikan yang disebut dengan data payload, dan packet trailer yang bersifat opsional. Sebuah paket memiliki struktur logis yang dibentuk oleh protokol yang digunakannya.
~ NETWORK PACKET SNIFFER:
~ Packet sniffer adalah program yang menangkap semua paket data yang melewati antarmuka jaringan/network interface,dan recognizes dan mendecode paket tersebut.Sebuah paket sniffer kadang-kadang disebut sebagai network monitor dan network analyzer.Hal ini biasanya digunakan oleh administrator sistem untuk memonitor dan memecahkan masalah dalam lalu lintas jaringan.Namun, kadang-kadang juga digunakan oleh penyusup berbahaya untuk tujuan terlarang seperti mencuri password pengguna dari nomor kartu kredit dan sebagainya.Biasanya, sebuah komputer dalam sebuah jaringan hanya akan menangkap paket data yang ditujukan untuk mesin tersebut. Namun, jika antarmuka jaringan dikonfigurasikan dalam mode promiscuous,komputer mampu menangkap semua paket yang melintasi jaringan tersebut tanpa tujuan. Sebuah paket sniffer hanya dapat menangkap paket dalam subnet yang diberikan...
Paket Sniffer dapat dimanfaatkan untuk hal-hal berikut:
* Mengatasi permasalahan pada jaringan komputer.
* Mendeteksi adanya penyelundup dalam jaringan (Network Intusion).
* Memonitor penggunaan jaringan dan menyaring isi isi tertentu.
* Memata-matai pengguna jaringan lain dan mengumpulkan informasi pribadi yang dimilikanya (misalkan password).
* Dapat digunakan untuk Reverse Engineer pada jaringan.dll

~ HOW IT WORK / bagaimana cara kerja Network packet sniffer ?
~ Packet sniffers menangkap data yang berbentuk "binary" yang lewat melalui jaringan, kebanyakan tidak semua sniffer bisa melakukan "decode" terhadap data ini menjadi bentuk yang dapat dibaca manusia.Untuk membuatnya lebih mudah (bagi manusia) langkah lain terjadi yang dikenal sebagai "analisis protokol".dan analis protocol berbeda2,beberapa sederhana dan hanya sedikit "paket" informasi. Yang lain lebih kompleks memberikan "rinci" informasi tentang apa yang dilihatnya pada paket (yaitu, menyoroti password untuk layanan dll).
~ Salah satu yang sangat penting (dan sangat sederhana) poin untuk memahami network packet sniffer bahwa kita harus berada pada satu jaringan yang sama dengan travel data. Singkatnya perangkat "probing" yang "menangkap"/"capture" harus memiliki data pada kabel yang sama. Data kemudian dapat diteruskan dan didecoding pada komputer.
Situasi: jimmy dan regina terlibat dalam sesi chatting. dan kamu berada di kota yang jauh terpisah dari dua orang tersebut.jimmy dan regina sedang berbicara rincian rahasia tentang penjualan kokain/sabu2.kamu sebagai (warga negara patuh hukum) memutuskan untuk melakukan sniffer sesi chatting,source data,destination dll untuk mengetahui keberadaan mereka dll(dari lokasi kamu) untuk membantu polisi menangkap jimmy dan regina.
~ Jawaban yang sederhana adalah kalian TIDAK BISA melakukan itu karena kalian tidak memiliki akses ke jalan yang telah di lewati oleh data tersebut! Tentu saja jika kalian adalah seorang hacker yang baik (atau juga Cracker) maka kalian bisa menginstal Trojan pada komputer jimmy atau regina dan menjalankan aplikasi network packet sniffer dari sistem mereka, sehingga sniffer ada pada jaringan yang sama.


~ We must know about IP header/kita harus tau tentang IP header/Header IP
Consep:
~ TCP akan mengirim setiap datagram ke IP dan meminta IP untuk mengirimkannya ke tujuan (tentu saja dg cara mengirimkan IP alamat tujuan). Inilah tugas IP sebenarnya. IP tidak peduli apa isi dari datagram, atau isi dari TCP header. Tugas IP sangat sederhana, yaitu hanya mengantarkan datagram tersebut sampai tujuan (lihat bahasan sebelumnya). Jika IP melewati suatu gateway, maka ia kemudian akan menambahkan header miliknya. Hal yg penting dari header ini adalah source address dan Destination address, protocol number dan checksum. source address adalah alamat asal datagram. Destination address adalah alamat tujuan datagram (ini penting agar gateway mengetahui ke mana datagram akan pergi). Protocol number meminta IP tujuan untuk mengirim datagram ke TCP. Karena meskipun jalannya IP menggunakan TCP, tetapi ada juga protokol tertentu yg dapat menggunakan IP, jadi kita harus memastikan IP menggunakan protokol apa untuk mengirim datagram tersebut. Akhirnya, checksum akan meminta IP tujuan untuk meyakinkan bahwa header tidak mengalami kerusakan. Yang perlu dicatat yaitu bahwa TCP dan IP menggunakan checksum yang berbeda. Berikut inilah tampilan header IP :
Dari http://www.networksorcery.com/enp/protocol/ip.htm
Code:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Selanjutnya berikut ringkasan mengenai bagian header yg belum dibahas :
a. Total length, merupakan panjang keseluruhan datagram dalam oktet, termasuk header dan data IP.
b. Identification, digunakan untuk membantu proses penggabungan kembali pecahan-pecahan dari sebuah datagram.
c. Flag,berisi tiga kontrol flag.
- bit 0, dicadangkan, harus 0.
- Bit 1, tidak boleh pecah.
- Bit 2, masih ada fragment lagi.
d. Fragment offset, menunjukan posisi fragment di dalam datagram.
e. Time to live, menunjukan batas waktu maksimal bagi sebuah datagram
f. padding ,Digunakan sebagai pengisi untuk menjamin bahwa data dimulai pada batas 32 ​​bit.
g. Option ,transmission di semua particular datagram

pertanyaanya sekarang kenapa kita harus tau tentang ip header ?? karena inilah intinya dalam packet sniffer . karena di sinilah kita tau dimana letak2 data2 packet yang akan kita dapatkan.
ok saya rasa cukup untuk sedikit theory mari selanjutnya kita membuat sebuah network packet sniffer kita sendiri dengan python.
di sini lib yang saya gunakan adalah base dari lib socket bawaan python sendiri . banyak lib2 yang sudah di kembangkan yang lebih powerfull seperti libpcap,pcap,scapy dll cuman di sini saya lebih prefer untuk dasar memakai lib sederhana bawaan python yang tidak kalah powerfull untuk basic .

First code . yang paling basic untuk packet sniffer adalah seperti berikut

Code:
#Simple Packet sniffer by jimmromanticdevil
import socket #import lib socket

#buat sebuah INET, set socket menjadi raw socket,dan set protocol TCP
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)

#menerima sebuah packet
while True:
  print s.recvfrom(65565)

Jalankan sebagai root privileges atau sudo di ubuntu
sudo python simplesniffer.py

Maka outputnya akan seperti ini.
jimmyromanticdevil@jimmyromanticdevil:~/privatecodejimmy$ sudo python sockettutor1.py
Code:
[sudo] password for jimmyromanticdevil:
('E\x00\x004\xf3\xe9@\x00:\x06iJE\xab\xf2\'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xaf"\x80\x10\x82 S\xfc\x00\x00\x01\x01\x08\nA\x84\xean\x00A\xbd\xd5', ('69.171.242.39', 0))
("E\x00\x004\xf3\xea@\x00:\x06iIE\xab\xf2'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xb4\x8e\x80\x10\x82 N`\x00\x00\x01\x01\x08\nA\x84\xea\x80\x00A\xbd\xf3", ('69.171.242.39', 0))
('E\x00\x004\xf3\xeb@\x00:\x06iHE\xab\xf2\'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xb9\xfa\x80\x10\x82 H\xb3\x00\x00\x01\x01\x08\nA\x84\xea\x92\x00A\xbe"', ('69.171.242.39', 0))
('E\x00\x004\xf3\xec@\x00:\x06iGE\xab\xf2\'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xbff\x80\x10\x82 C5\x00\x00\x01\x01\x08\nA\x84\xea\xa4\x00A\xbe"', ('69.171.242.39', 0))
("E\x00\x004\xf3\xed@\x00:\x06iFE\xab\xf2'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xc4\xd2\x80\x10\x82 =\x8a\x00\x00\x01\x01\x08\nA\x84\xea\xb8\x00A\xbeM", ('69.171.242.39', 0))
^Z
[1]+  Stopped                 sudo python sockettutor1.py
Seperti kita lihat dalam output Di atas mendump dari network paket dalam bentuk hex.output di atas dapat diurai menggunakan fungsi unpack.

Berikut adalah kode untuk mengurai sebuah paket TCP:
Code:
#Simple Packet sniffer by jimmromanticdevil
import socket
import sys
from struct import *
import string
  
def proses2(packet,ihl):
    tcp_header = packet[20:40]
    #unpack data untuk mendapatkan tcp header:)
    tcph = unpack('!HHLLBBHHH' , tcp_header)
    source_port = tcph[0]
    dest_port = tcph[1]
    sequence = tcph[2]
    acknowledgement = tcph[3]
    doff_reserved = tcph[4]
    tcph_length = doff_reserved >> 4
    print """
Source Port : %s
Dest Port :  %s
Sequence Number : %s
Acknowledgement : %s
TCP header length : %s
"""%(str(source_port),str(dest_port),str(sequence),str(acknowledgement),str(tcph_length))
    #dapatkan data dari packet,
    print 'Data : \n' + packet

def proses1(socket_setup):
    packet = socket_setup.recvfrom(65565)
    #packet string dari tuple
    packet = packet[0]
    #ambil 20 karakter untuk ip header
    ip_header = packet[0:20]
    #unpacket data untuk mendapatkan ip :)
    iph = unpack('!BBHHHBBH4s4s' , ip_header)
    version_ihl = iph[0]
    version = version_ihl >> 4
    ihl = version_ihl & 0xF
    ttl = iph[5]
    protocol = iph[6]
    s_addr = socket.inet_ntoa(iph[8]);
    d_addr = socket.inet_ntoa(iph[9]);
    print """
Version : %s
IP Header Length : %s
TTL : %s
Protocol : %s
Source Address : %s
Destination Address : %s
"""%(str(version),str(ihl),str(ttl),str(protocol),str(s_addr),str(d_addr))
    proses2(packet,ihl) # --> lempar data ke proses2

#create an INET, STREAMing socket,type protocol tcp dan lempar data ke proses1
def main():
    socket_setup = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
    # dapatkan packet
    while True:
       try:
         proses1(socket_setup)
       except Exception ,er:
         print er
         sys.exit()
         break
        
if __name__ == "__main__":
     main()

dan Jalankan sebagai root privileges atau sudo di ubuntu
sudo python simplesniffer.py

Kode di atas memecah paket header IP + header TCP + data.
Fungsi unpack digunakan untuk memecah paket.supaya dapat di baca dengan mudah.
selanjutnya kalian bisa melihatnya di sini http://docs.python.org/library/struct.ht...characters
dan untuk unpack bentuk dari tcp_header !HHLLBBHHH sendiri dn selanjutnya saya dapatkan dari #http://yuba.stanford.edu/git/gitweb.cgi?p=oftest.git;a=commitdiff;h=6c1ed0944beb5e90973f89179e0901b30f85f331.


Output dari kode akan terlihat seperti ini:
Code:
jimmyromanticdevil@jimmyromanticdevil:~/privatecodejimmy$ sudo python sockettutor2.py
Version : 4
IP Header Length : 5
TTL : 58
Protocol : 6
Source Address : 69.171.227.36
Destination Address : 120.165.18.50


Source Port : 80
Dest Port :  50431
Sequence Number : 1753967047
Acknowledgement : 2095505802
TCP header length : 8

Data :
E�&>@:b�E��$x�2P��h�i�|�ኀ� Lx
A�]��Y�HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 730
Content-Type: text/plain
Access-Control-Allow-Origin: http://www.facebook.com
Access-Control-Allow-Credentials: true
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Date: Tue, 06 Dec 2011 15:42:28 GMT
Via: HTTP/1.1 Proxygen (35)
Connection: keep-alive

......
[4]+  Stopped                 sudo python sockettutor2.py

Masih banyak data yang belum bisa di uray seperti contoh data di atas :
E��@:��E��$x�2P����t=�� �
dikarenakan data belum bisa di decoding.jika kalian ingin mendecodingnya kalian bisa mengunakan fungsi impacket
http://oss.coresecurity.com/projects/impacket.html

Code:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Jika IHL adalah 5 maka ukuran total 20 byte maka options+padding.
Untuk paket protokol TCP adalah 6. Alamat sumber adalah sumber alamat IPv4 dalam format panjang.
Di sini saya mengunakan teori Menurut RFC 791 [http://www.networksorcery.com/enp/rfc/rfc791.txt]
header IP terlihat seperti ini:
Code:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
dan balance setelah TCP header adalah data portion.

sedikit tambahan bahwa :
1. Sniffer di atas hanya akan mengambil paket TCP, karena deklarasi:
Code:
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
Untuk UDP dan ICMP deklarasi harus:
Code:
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)

kalian mungkin tergoda untuk berpikir untuk melakukan:
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
tapi ini tidak akan bekerja, karena IPPROTO_IP adalah protokol bodoh bukan yang asli.
2. Sniffer ini mengambil paket-paket yang masuk.
3. Sniffer ini hanya memberikan frame IP, yang berarti ethernet header tidak tersedia.

Wah masih sangat2 simple yah .. bagaimana kalau kita mengedit sedikit code supaya lebih powerfull .. ? Big Grin ok lets do it on next artikel.lol
artikel selanjutnya saya akan menjelaskan bagaimana cara membuat 'network packet sniffer di python dengan mengunakan library yang powerfull seperti scapy,pycapy,libpcap' ok sekian artikel/tutorial dari saya selanjutnya silahkan kalian explore sendiri . semogah bermanfaat.
jangan lupa jika ada pertnyaan silahkan tinggalkan komentar di bawah.

Special thanks to my refrensi :
Wikipedia :
~ http://id.wikipedia.org/wiki/Protokol_Internet
~ http://en.wikipedia.org/wiki/Network_packet
python lib dokumentasi http://docs.python.org/library/socket.html
about sniffer : http://www.cs.wright.edu/~pmateti/Intern...index.html
ip header struc http://www.networksorcery.com/enp/protocol/ip.htm
format string : http://docs.python.org/library/struct.ht...characters

5ynl0rd,Ardhe defourteens aka hardiknas,Kiddies,Ahmad asto,all my broth n sistr in DCC,indonesianbacktrack team,Tecon-Crew Labs,all my friend & You....

~ Author articel & source code by rahmat ramadhan aka jimmyromanticdevil(python software engineer from void-labs developer team)

#2
wew.... basicnya aja kyk gini, bijimana klo advance ya :apn:

TOP buat om jimmy Tongue
[Image: 33529117274.jpg]

#3
gakuattttt....
keren dah om jimi..
ane harus berguurrru ame ente
Yang putih, yang seharusnya ber-aksi dan berbakat!
Linuxtivist blog

#4
mantap...
materi dasarnya dapet materi hackingnya juga dapet..

keren dah buat om jimi...

++ dah...
Hidup Harus Di Bawa Happy..!!!

#5
maaf om jim teknik phython sebener nya bisa stand alone atau selalu butuh kombinasi tolls lain nya om ...
cz saya pernah baca phython ini ada berbagai versi ...???
tidak ada mantra yang lebih ampuh kecuali membaca dan mencobanya

#6
(12-07-2011, 12:58 AM)jimmyromanticdevil Wrote: [Image: 2zhfqfp.jpg]

Halo teman - teman ketemu lagi bersama penulis rahmat ramadhan aka jimmyromanticdevil . ok kali ini si penulis akan membahas tentang network packet sniffer . pada tutorial ini penulis akan mengunakan bahasa pemrogramman Python untuk code-code network packet sniffer dan OS linux untuk menjalankan codenya.tapi sebelum itu kita kenal dulu apa sebenarnya network packet sniffer itu .

First Theory/Teori pertama tentang Packet .
What is Network Packet sniffer / Apa sebenarnya Network packet sniffer itu ?
Anaglogy :
~ Ketika kita terkoneksi dengan internet,data tidak dikirim dalam satu aliran data yang berkelanjutan,ini akan menjadi tidak praktis dan itu akan membatasi kinerja jaringan internet.Untuk menjaga kinerja Internet semaksimal mungkin, data dipotong atau di iris. Seperti sepotong data (baik inbound atau outbound) disebut "paket".dan packet tidak dapat kalian lihat dengan mata telanjang . Mengirimkan informasi pada jaringan berarti mengirim "paket" data.nah analoginya Pikirkan mereka seperti atom. Banyaknya paket akan menciptakan informasi akhir yang akan kalian lihat pada layar kalian, baik itu website atau email. Untuk "melihat" atom kalian akan memerlukan perangkat khusus, beberapa jenis mikroskop elektron, untuk dapat melihat "paket" kalian sudah dikirim atau diterima.kalian juga membutuhkan perangkat khusus. Ini adalah tipe khusus dari program monitoring yang disebut.packet sniffer. Dengan menggunakan sebuah packet sniffer kalian dapat melihat informasi-informasi yang masuk atau terkirim dari komputer kalian.
Definisi :
~ NETWORK PACKET :
~ Paket jaringan atau network packet adalah satuan informasi dasar yang dapat ditransmisikan di atas jaringan atau melalui saluran komunikasi digital. Sebuah paket berisi packet header yang berisi informasi mengenai protokol tersebut (informasi mengenai type,source data, destination source,data,ip addres atau informasi lainnya), data yang hendak ditransmisikan yang disebut dengan data payload, dan packet trailer yang bersifat opsional. Sebuah paket memiliki struktur logis yang dibentuk oleh protokol yang digunakannya.
~ NETWORK PACKET SNIFFER:
~ Packet sniffer adalah program yang menangkap semua paket data yang melewati antarmuka jaringan/network interface,dan recognizes dan mendecode paket tersebut.Sebuah paket sniffer kadang-kadang disebut sebagai network monitor dan network analyzer.Hal ini biasanya digunakan oleh administrator sistem untuk memonitor dan memecahkan masalah dalam lalu lintas jaringan.Namun, kadang-kadang juga digunakan oleh penyusup berbahaya untuk tujuan terlarang seperti mencuri password pengguna dari nomor kartu kredit dan sebagainya.Biasanya, sebuah komputer dalam sebuah jaringan hanya akan menangkap paket data yang ditujukan untuk mesin tersebut. Namun, jika antarmuka jaringan dikonfigurasikan dalam mode promiscuous,komputer mampu menangkap semua paket yang melintasi jaringan tersebut tanpa tujuan. Sebuah paket sniffer hanya dapat menangkap paket dalam subnet yang diberikan...
Paket Sniffer dapat dimanfaatkan untuk hal-hal berikut:
* Mengatasi permasalahan pada jaringan komputer.
* Mendeteksi adanya penyelundup dalam jaringan (Network Intusion).
* Memonitor penggunaan jaringan dan menyaring isi isi tertentu.
* Memata-matai pengguna jaringan lain dan mengumpulkan informasi pribadi yang dimilikanya (misalkan password).
* Dapat digunakan untuk Reverse Engineer pada jaringan.dll

~ HOW IT WORK / bagaimana cara kerja Network packet sniffer ?
~ Packet sniffers menangkap data yang berbentuk "binary" yang lewat melalui jaringan, kebanyakan tidak semua sniffer bisa melakukan "decode" terhadap data ini menjadi bentuk yang dapat dibaca manusia.Untuk membuatnya lebih mudah (bagi manusia) langkah lain terjadi yang dikenal sebagai "analisis protokol".dan analis protocol berbeda2,beberapa sederhana dan hanya sedikit "paket" informasi. Yang lain lebih kompleks memberikan "rinci" informasi tentang apa yang dilihatnya pada paket (yaitu, menyoroti password untuk layanan dll).
~ Salah satu yang sangat penting (dan sangat sederhana) poin untuk memahami network packet sniffer bahwa kita harus berada pada satu jaringan yang sama dengan travel data. Singkatnya perangkat "probing" yang "menangkap"/"capture" harus memiliki data pada kabel yang sama. Data kemudian dapat diteruskan dan didecoding pada komputer.
Situasi: jimmy dan regina terlibat dalam sesi chatting. dan kamu berada di kota yang jauh terpisah dari dua orang tersebut.jimmy dan regina sedang berbicara rincian rahasia tentang penjualan kokain/sabu2.kamu sebagai (warga negara patuh hukum) memutuskan untuk melakukan sniffer sesi chatting,source data,destination dll untuk mengetahui keberadaan mereka dll(dari lokasi kamu) untuk membantu polisi menangkap jimmy dan regina.
~ Jawaban yang sederhana adalah kalian TIDAK BISA melakukan itu karena kalian tidak memiliki akses ke jalan yang telah di lewati oleh data tersebut! Tentu saja jika kalian adalah seorang hacker yang baik (atau juga Cracker) maka kalian bisa menginstal Trojan pada komputer jimmy atau regina dan menjalankan aplikasi network packet sniffer dari sistem mereka, sehingga sniffer ada pada jaringan yang sama.


~ We must know about IP header/kita harus tau tentang IP header/Header IP
Consep:
~ TCP akan mengirim setiap datagram ke IP dan meminta IP untuk mengirimkannya ke tujuan (tentu saja dg cara mengirimkan IP alamat tujuan). Inilah tugas IP sebenarnya. IP tidak peduli apa isi dari datagram, atau isi dari TCP header. Tugas IP sangat sederhana, yaitu hanya mengantarkan datagram tersebut sampai tujuan (lihat bahasan sebelumnya). Jika IP melewati suatu gateway, maka ia kemudian akan menambahkan header miliknya. Hal yg penting dari header ini adalah source address dan Destination address, protocol number dan checksum. source address adalah alamat asal datagram. Destination address adalah alamat tujuan datagram (ini penting agar gateway mengetahui ke mana datagram akan pergi). Protocol number meminta IP tujuan untuk mengirim datagram ke TCP. Karena meskipun jalannya IP menggunakan TCP, tetapi ada juga protokol tertentu yg dapat menggunakan IP, jadi kita harus memastikan IP menggunakan protokol apa untuk mengirim datagram tersebut. Akhirnya, checksum akan meminta IP tujuan untuk meyakinkan bahwa header tidak mengalami kerusakan. Yang perlu dicatat yaitu bahwa TCP dan IP menggunakan checksum yang berbeda. Berikut inilah tampilan header IP :
Dari http://www.networksorcery.com/enp/protocol/ip.htm
Code:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Selanjutnya berikut ringkasan mengenai bagian header yg belum dibahas :
a. Total length, merupakan panjang keseluruhan datagram dalam oktet, termasuk header dan data IP.
b. Identification, digunakan untuk membantu proses penggabungan kembali pecahan-pecahan dari sebuah datagram.
c. Flag,berisi tiga kontrol flag.
- bit 0, dicadangkan, harus 0.
- Bit 1, tidak boleh pecah.
- Bit 2, masih ada fragment lagi.
d. Fragment offset, menunjukan posisi fragment di dalam datagram.
e. Time to live, menunjukan batas waktu maksimal bagi sebuah datagram
f. padding ,Digunakan sebagai pengisi untuk menjamin bahwa data dimulai pada batas 32 ​​bit.
g. Option ,transmission di semua particular datagram

pertanyaanya sekarang kenapa kita harus tau tentang ip header ?? karena inilah intinya dalam packet sniffer . karena di sinilah kita tau dimana letak2 data2 packet yang akan kita dapatkan.
ok saya rasa cukup untuk sedikit theory mari selanjutnya kita membuat sebuah network packet sniffer kita sendiri dengan python.
di sini lib yang saya gunakan adalah base dari lib socket bawaan python sendiri . banyak lib2 yang sudah di kembangkan yang lebih powerfull seperti libpcap,pcap,scapy dll cuman di sini saya lebih prefer untuk dasar memakai lib sederhana bawaan python yang tidak kalah powerfull untuk basic .

First code . yang paling basic untuk packet sniffer adalah seperti berikut

Code:
#Simple Packet sniffer by jimmromanticdevil
import socket #import lib socket

#buat sebuah INET, set socket menjadi raw socket,dan set protocol TCP
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)

#menerima sebuah packet
while True:
  print s.recvfrom(65565)

Jalankan sebagai root privileges atau sudo di ubuntu
sudo python simplesniffer.py

Maka outputnya akan seperti ini.
jimmyromanticdevil@jimmyromanticdevil:~/privatecodejimmy$ sudo python sockettutor1.py
Code:
[sudo] password for jimmyromanticdevil:
('E\x00\x004\xf3\xe9@\x00:\x06iJE\xab\xf2\'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xaf"\x80\x10\x82 S\xfc\x00\x00\x01\x01\x08\nA\x84\xean\x00A\xbd\xd5', ('69.171.242.39', 0))
("E\x00\x004\xf3\xea@\x00:\x06iIE\xab\xf2'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xb4\x8e\x80\x10\x82 N`\x00\x00\x01\x01\x08\nA\x84\xea\x80\x00A\xbd\xf3", ('69.171.242.39', 0))
('E\x00\x004\xf3\xeb@\x00:\x06iHE\xab\xf2\'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xb9\xfa\x80\x10\x82 H\xb3\x00\x00\x01\x01\x08\nA\x84\xea\x92\x00A\xbe"', ('69.171.242.39', 0))
('E\x00\x004\xf3\xec@\x00:\x06iGE\xab\xf2\'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xbff\x80\x10\x82 C5\x00\x00\x01\x01\x08\nA\x84\xea\xa4\x00A\xbe"', ('69.171.242.39', 0))
("E\x00\x004\xf3\xed@\x00:\x06iFE\xab\xf2'x\xa63\x17\x00P\xdfLE%KP\xb3\xd1\xc4\xd2\x80\x10\x82 =\x8a\x00\x00\x01\x01\x08\nA\x84\xea\xb8\x00A\xbeM", ('69.171.242.39', 0))
^Z
[1]+  Stopped                 sudo python sockettutor1.py
Seperti kita lihat dalam output Di atas mendump dari network paket dalam bentuk hex.output di atas dapat diurai menggunakan fungsi unpack.

Berikut adalah kode untuk mengurai sebuah paket TCP:
Code:
#Simple Packet sniffer by jimmromanticdevil
import socket
import sys
from struct import *
import string
  
def proses2(packet,ihl):
    tcp_header = packet[20:40]
    #unpack data untuk mendapatkan tcp header:)
    tcph = unpack('!HHLLBBHHH' , tcp_header)
    source_port = tcph[0]
    dest_port = tcph[1]
    sequence = tcph[2]
    acknowledgement = tcph[3]
    doff_reserved = tcph[4]
    tcph_length = doff_reserved >> 4
    print """
Source Port : %s
Dest Port :  %s
Sequence Number : %s
Acknowledgement : %s
TCP header length : %s
"""%(str(source_port),str(dest_port),str(sequence),str(acknowledgement),str(tcph_length))
    #dapatkan data dari packet,
    print 'Data : \n' + packet

def proses1(socket_setup):
    packet = socket_setup.recvfrom(65565)
    #packet string dari tuple
    packet = packet[0]
    #ambil 20 karakter untuk ip header
    ip_header = packet[0:20]
    #unpacket data untuk mendapatkan ip :)
    iph = unpack('!BBHHHBBH4s4s' , ip_header)
    version_ihl = iph[0]
    version = version_ihl >> 4
    ihl = version_ihl & 0xF
    ttl = iph[5]
    protocol = iph[6]
    s_addr = socket.inet_ntoa(iph[8]);
    d_addr = socket.inet_ntoa(iph[9]);
    print """
Version : %s
IP Header Length : %s
TTL : %s
Protocol : %s
Source Address : %s
Destination Address : %s
"""%(str(version),str(ihl),str(ttl),str(protocol),str(s_addr),str(d_addr))
    proses2(packet,ihl) # --> lempar data ke proses2

#create an INET, STREAMing socket,type protocol tcp dan lempar data ke proses1
def main():
    socket_setup = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
    # dapatkan packet
    while True:
       try:
         proses1(socket_setup)
       except Exception ,er:
         print er
         sys.exit()
         break
        
if __name__ == "__main__":
     main()

dan Jalankan sebagai root privileges atau sudo di ubuntu
sudo python simplesniffer.py

Kode di atas memecah paket header IP + header TCP + data.
Fungsi unpack digunakan untuk memecah paket.supaya dapat di baca dengan mudah.
selanjutnya kalian bisa melihatnya di sini http://docs.python.org/library/struct.ht...characters
dan untuk unpack bentuk dari tcp_header !HHLLBBHHH sendiri dn selanjutnya saya dapatkan dari #http://yuba.stanford.edu/git/gitweb.cgi?p=oftest.git;a=commitdiff;h=6c1ed0944beb5e90973f89179e0901b30f85f331.


Output dari kode akan terlihat seperti ini:
Code:
jimmyromanticdevil@jimmyromanticdevil:~/privatecodejimmy$ sudo python sockettutor2.py
Version : 4
IP Header Length : 5
TTL : 58
Protocol : 6
Source Address : 69.171.227.36
Destination Address : 120.165.18.50


Source Port : 80
Dest Port :  50431
Sequence Number : 1753967047
Acknowledgement : 2095505802
TCP header length : 8

Data :
E�&>@:b�E��$x�2P��h�i�|�ኀ� Lx
A�]��Y�HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Length: 730
Content-Type: text/plain
Access-Control-Allow-Origin: http://www.facebook.com
Access-Control-Allow-Credentials: true
Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Date: Tue, 06 Dec 2011 15:42:28 GMT
Via: HTTP/1.1 Proxygen (35)
Connection: keep-alive

......
[4]+  Stopped                 sudo python sockettutor2.py

Masih banyak data yang belum bisa di uray seperti contoh data di atas :
E��@:��E��$x�2P����t=�� �
dikarenakan data belum bisa di decoding.jika kalian ingin mendecodingnya kalian bisa mengunakan fungsi impacket
http://oss.coresecurity.com/projects/impacket.html

Code:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Jika IHL adalah 5 maka ukuran total 20 byte maka options+padding.
Untuk paket protokol TCP adalah 6. Alamat sumber adalah sumber alamat IPv4 dalam format panjang.
Di sini saya mengunakan teori Menurut RFC 791 [http://www.networksorcery.com/enp/rfc/rfc791.txt]
header IP terlihat seperti ini:
Code:
0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             data                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
dan balance setelah TCP header adalah data portion.

sedikit tambahan bahwa :
1. Sniffer di atas hanya akan mengambil paket TCP, karena deklarasi:
Code:
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
Untuk UDP dan ICMP deklarasi harus:
Code:
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)

kalian mungkin tergoda untuk berpikir untuk melakukan:
socket_setup = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
tapi ini tidak akan bekerja, karena IPPROTO_IP adalah protokol bodoh bukan yang asli.
2. Sniffer ini mengambil paket-paket yang masuk.
3. Sniffer ini hanya memberikan frame IP, yang berarti ethernet header tidak tersedia.

Wah masih sangat2 simple yah .. bagaimana kalau kita mengedit sedikit code supaya lebih powerfull .. ? Big Grin ok lets do it on next artikel.lol
artikel selanjutnya saya akan menjelaskan bagaimana cara membuat 'network packet sniffer di python dengan mengunakan library yang powerfull seperti scapy,pycapy,libpcap' ok sekian artikel/tutorial dari saya selanjutnya silahkan kalian explore sendiri . semogah bermanfaat.
jangan lupa jika ada pertnyaan silahkan tinggalkan komentar di bawah.

Special thanks to my refrensi :
Wikipedia :
~ http://id.wikipedia.org/wiki/Protokol_Internet
~ http://en.wikipedia.org/wiki/Network_packet
python lib dokumentasi http://docs.python.org/library/socket.html
about sniffer : http://www.cs.wright.edu/~pmateti/Intern...index.html
ip header struc http://www.networksorcery.com/enp/protocol/ip.htm
format string : http://docs.python.org/library/struct.ht...characters

5ynl0rd,Ardhe defourteens aka hardiknas,Kiddies,Ahmad asto,all my broth n sistr in DCC,indonesianbacktrack team,Tecon-Crew Labs,all my friend & You....

~ Author articel & source code by rahmat ramadhan aka jimmyromanticdevil(python software engineer from void-labs developer team)

widdiiiihh ngeyii,,ijin belajar om jimmy

#7
mantaps omz... izin ctrl+d dulu omz... + izin copas... hehehe..... Big Grin






Users browsing this thread: 1 Guest(s)