
raw paketiyle sniffer yapımı
Raw packet i oluşturarak trafik dinlemeyi göstericez.öncelikle kütüphanelerimizi import edelim.
1 2 3 4 |
import socket //raw paketi oluşturmak için gerekli import struct //gelen paketin içini açmak için gerekli import binascii //düzgün bir biçimde paketi okumak için gerekli |
şimdi öncelikle raw paketimizi oluşturalım
1 |
raw=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800)) |
socket.PF_PACKET linüx için geçerli eğer windows kullanıyorsanız socket.AF_INET kullanınız.
socket.SOCK_RAW soketimizin raw olacagını bildirdik.
socket.htons(0x0800) burada da ip ile ilgileneceğimizi bildirdik.
artık paketimiz hazır şimdi gelen paketleri durmadan almak için
1 |
while 1: |
kullanalı sonrasında paketimizi almak için
1 |
paket=raw_recvfrom(2048) |
paketimizi aldık şimdi bize lazım olan paket içindeki bilgileri almada bunun içindeki 14 bayt ethernet header, sonraki 20 bayt ise ip header olarak ayarlanmıştır onun için bize de bunlar lazım onun için şöyle bir kodlama gerekli
1 |
eth=paket[0][0:14] |
ilk olarak ethernet header aldık şimdi bunun ilk 6 baytı destination yani hedef diğer 6 bayt kaynak son 2 side type ı ifade eder bunları böyle ayırabilmek için struct metodunu kullanacağız.
1 |
eth1=struct.unpack("!6s6s2s",eth) |
evet paketi ayırdık sıra geldi bunları ekrana basmaya.
1 |
print binascii.hexlify(eth1[1])+"----->"+binascii.hexlify(eth1[0])+"type: "+binascii.hexlify(eth1[2]) |
evet ekrana bastık bu bize hangi mac adresinden hangisine gittiğini gösteriyor sıra geldi ipleri almaya onun için daha demin 14 bayt için yaptığımız şimdi 20 bayt için yapacağız.
1 |
ip=paket[0][14:34] |
1 |
ip1=struct.unpack("!12s4s4s",ip) |
bu paketin ilk 12 si bizi ilgilendirmiyor sonra ki 4 bayt kaynak son 4 baytta hedef ip si
şimdi buradan sonra ekrana basmak kaldı.
1 |
print socket.inet_ntoa(ip1[1])+"------>"+socket.inet_ntoa(ip1[2]) |
evet ip leri de ekrana basmış olduk
scriptimizin son hali:
1 2 3 4 5 6 7 8 9 10 11 12 |
import socket import binascii import struct raw=socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0800)) while 1: paket=raw.recvfrom(2048) eth=paket[0][0:14] eth1=struct.unpack("!6s4s4s",eth) print binascii.hexlify(eth1[1])+"--->"+binascii.hexlify(eth1[0])+"type: "+binascii.hexlify(eth1[2])+"\n" ip=paket[0][14:34] ip1=struct.unpack("!12s4s4s",ip) print socket.inet_ntoa(ip1[1])+"---->"+socket.inet_ntoa(ip1[2])> |
evet bu kodla bize gelen paketlerin hangi ip ve mac den geldiğini görebiliriz.İyi günler anlamadığınız yer varsa sorabilirsiniz.Bu script i geliştirip daha ayrıntılı bilgi almakta mümkün.
Bir Cevap Yaz