4 Mart 2014 Salı

Ağ üzerindeki snifferların (paket koklayacıların) tespit edilmesi için scapy kütüphanesi ile geliştirilmiş betik kullanılabilir. Amaç promiscious modda çalışan uç birimlerin tespit edilmesidir. Paket yakalayıcı çalıştırılan uç birimlere kendisinin sorgulandığı bozuk broadcast paketleri gönderilir. Normalde uç birim promiscious modda değilse bu paketleri önemsemeyecektir. Ama promiscious modda ise paketin hedefi neresi olduğunu kontrol etmeksizin paketi kabul edecektir ve paketin içerisinde de kendisinin sorgulandığını gördüğü için cevaplayacaktır. Böylelike o uç birimde paket yakalayıcı çalışıp çalışmadığı anlaşılabilecektir.

>>   fake_bcast="ff:ff:ff:ff:ff:fe"
Bozuk broadcast paketinin hazırlanması

>>  ans,unans = srp(Ether(dst=fake_bcast)/ARP(pdst=net), filter="arp and arp[7] = 2", timeout=1, iface_hint=net) 
Gönderilecek paket hazırlanıyor.


#!/usr/bin/python

import sys

try:
    from scapy.all import *
except ImportError:
    sys.stderr.write("Scapy module must be installed in order to run this script !!!\n")
    sys.exit(37)   
   

def usage ():
    sys.stderr.write("%s  <-ip ip_address | -net net> \n"% (sys.argv[0]))
    sys.stderr.write("%s -ip 10.0.0.37 | -net 192.168.1.0/24\n"% (sys.argv[0]))
    sys.exit(37)


def is_net_sniffer(net):
    fake_bcast="ff:ff:ff:ff:ff:fe"
    
    ans,unans = srp(Ether(dst=fake_bcast)/ARP(pdst=net), 
    filter="arp and arp[7] = 2", timeout=1, iface_hint=net) 
    ans = ARPingResult(ans.res, name="galkan.net") 
     
    for snd,rcv in ans:
        print rcv.sprintf("%ARP.psrc%")

    
def is_ip_sniffer (ip_address):
    fake_bcast="ff:ff:00:00:00:00"

    responses = srp1(Ether(dst=fake_bcast) / ARP(op="who-has", pdst=destination_ip),type=ETH_P_ARP, iface_hint=destination_ip, timeout=1, verbose=0) 

    if responses:
        print "%s :OK"% (ip_address)
    else:
        print "%s: NOT"% (ip_address)

        

if __name__ == "__main__":
    
    
    if len(sys.argv) != 3:
 usage() 
    elif (sys.argv[1] == "-ip" and sys.argv[2]) :
        destination_ip = sys.argv[2]
        is_ip_sniffer(destination_ip)
    elif (sys.argv[1] == "-net" and sys.argv[2]):
        net = sys.argv[2]
        is_net_sniffer(net)
    else:
 usage()



Betik detect_sniffer.py isimli dosyaya kaydediliğ aşağıdaki şekilde çalıştırıldığıdan elde edilecel çıktı aşağıdakinne benze şekilde olmaktadır.

# ./detect_sniffers.py -ip 192.168.1.1
192.168.1.1: NOT
# ./detect_sniffers.py -ip 192.168.1.2
192.168.1.2: OK
# ./detect_sniffers.py -net 192.168.1.0/24
192.168.1.2
192.168.1.37
192.168.1.109

Kaynak:
http://www.galkan.net/p/python.html
http://www.python.org/ 

0 yorum :

Yorum Gönder