Python ve Scapy ile bir SYN taraması oluşturun

İçindekiler

Bu derste sana öğreteceğim bir TCP SYN tarama bağlantı noktası gerçekleştirin, bunun için kullanacağım piton kitapçı ile ürkütücü.

Python'u yüklemek için aşağıdaki öğreticiyi görebilirsiniz. Python için Scapy kitaplığını kurmak için aşağıdaki butona tıklayın:

SCAPY KÜTÜPHANESİ İNDİR

SYN taramasının ne olduğunu bilmekSYN taraması, bilgisayar korsanları tarafından tam bir bağlantı kurmadan bağlantı noktalarının durumunu belirlemek için kullanılan, açık uçlu tarama olarak da bilinen bir tarama tekniğidir. Bu tekniği DDOS saldırılarını (hizmet reddi saldırıları) gerçekleştirmek için de kullanmak mümkündür.

NotBu tür bir programın nasıl çalıştığını ve portlarınızı test edebileceğinizi, ancak kötü amaçlı kullanmayacağınızı öğretmeyi amaçlamaktadır.

Port tarayıcı ile başlayalım.

Aşama 1
Yaptığımız ilk şey, ihtiyacımız olan kütüphaneleri içe aktarmak.

 logging.getLogger ("scapy.runtime") dosyasını içe aktarın.
Scapy'yi programımıza aktarıyoruz ve ayrıca bir IPv6 adresimiz yoksa bize can sıkıcı bir uyarı göstermemesi için günlük kaydını da içe aktardım.

Adım 2
Değişkenlerimizi başlatmaya yarayan bir adım.

 conf.verb = 0 portlist = liste (aralık (20.130)) ana bilgisayar = "192.168.0.1"
Bu adımın ilk talimatı, ekranda Scapy bilgilerini bize göstermemesi için küçük bir konfigürasyon yapar. Aşağıda sadece eylemi gerçekleştireceğimiz bağlantı noktalarını ve ana bilgisayarı ekliyoruz, programı yürütürken parametre olarak eklemek daha iyi bir seçenek olacaktır, (programınız için eklemekle ilgileniyorsanız, bu bağlantıya bakın) , programı kolaylaştırmak ve kısaltmak için burada kullanışlıdır.

Aşama 3
Bu adım programın özüdür.

 portList'teki bağlantı noktası için yazdır ("IP bağlantı noktaları taranıyor:", ana bilgisayar): sourceport = RandShort () paket = IP (dst = ana bilgisayar) / TCP (spor = kaynak bağlantı noktası, dport = bağlantı noktası, bayraklar = "Y") yanıt = sr1 ( paket, zaman aşımı = 2) if ("NoneType" in str (type (response))): elif (response.haslayer (TCP) ve response.getlayer (TCP) iletin. flags == 0x12): p = IP (dst = host) / TCP (sport = sourceport, dport = port, flags = "R") rst = sr (p, zaman aşımı = 1) deneyin: service = socket.getservbyport (port) hariç: service = "?" yazdır ("[AÇIK]", bağlantı noktası, "->", hizmet)
Bu kısım nerede port taraması başlar, çalıştığını bilmemiz için bir mesaj gösteriyoruz ve için her limandan geçiyoruz. işlevi kullanıyoruz RandKısa () böylece gönderilen paket her seferinde farklı bir bağlantı noktasından kaynaklanır.

Paketin yapımı, for'da bulunan ikinci talimatla yapılır.. Bizi ilgilendiren verileri, IP katmanı için hedef IP'yi, kaynak ve hedef bağlantı noktalarını ve TCP için bayrakları yapılandırıyoruz, bu durumda bir SYN tarayıcı, yani S var, bu parametreyi değiştirerek başka bir tür yapabilirsiniz FIN taraması veya pencere taraması gibi (ancak aşağıdaki koşulları değiştirmeniz gerekeceğini unutmayın).

İşlev sr1 paketi göndermekten sorumlu. Bunu paketin oluşturduğu argüman olarak iletmemiz gerekiyor (bu sefer doğrudan burada yaratılıyor) ve bu durumda maksimum 2 saniye bekleme ayarladım, bunu değiştirebilirsiniz, ancak belirtmezseniz, programınız sonsuz hale gelebilir. Paketi göndermenin sonucu, yanıt değişkenine kaydedilir.

Koşullarda, bir yanıtımız olup olmadığını ve SYN ve ACK bayraklarının etkin olup olmadığını (bu nedenle 0x12 kullanıyoruz), ve daha önce kullanmıyorsak ve yanıt.haslayer (TCP) varsa, bilmekle ilgileniyoruz. katmana sahip değil, bir istisna atılacak. Bu koşul yerine getirilirse, bağlantıyı kesmek için RST bayrağının aktif olduğu bir mesaj göndereceğiz. Parçası dene… yakala görmezden gelebilirsiniz, tek yaptığı ekranda daha fazla bilgi göstermek için o bağlantı noktasında kullanılan hizmeti kaldırmaktır (işlev socket.getservbyport (bağlantı noktası) bilinen bir bağlantı noktasıysa bilgi döndürür, değilse bir istisna atar ve bu olursa ¿ koymayı seçtim? "bilgi" olarak, bilinmediğinin bir göstergesi olarak.)

Pekala, işimiz bitti, aşağıdaki resimde tarayıcı uygulamasının çıktısını görebilirsiniz:

Aşağıya tam kodu koyuyorum:

 import logging logging.getLogger ("scapy.runtime") setLevel (logging.ERROR) # scapy.all'dan uyarı gösterme import * conf.verb = 0 # Verileri ekranda gösterme listPorts = list (range ( 20,130) ) #Taranacak portların listesi host = "192.168.0.1" # Burada taramak istediğiniz IP, PortList'teki port için yazdırılır ("IP portları taranıyor:", ana bilgisayar): sourcePort = RandShort () paket = IP ( dst = ana bilgisayar) / TCP (spor = kaynak bağlantı noktası, dport = bağlantı noktası, bayraklar = "S") yanıt = sr1 (paket, zaman aşımı = 2) if ("NoneType" in str (type (response))): pass elif (yanıt) .haslayer (TCP) ve answer.getlayer (TCP) .flags == 0x12): p = IP (dst = ana bilgisayar) / TCP (spor = kaynak bağlantı noktası, dport = bağlantı noktası, bayraklar = "R") rst = sr (p, zaman aşımı = 1) deneyin: service = socket.getservbyport (port) hariç: service = "?" yazdır ("[AÇIK]", bağlantı noktası, "->", hizmet) 
[renk = rgb (169.169.169)] Tam kod [/ color]

NotBu tarayıcı birçok bağlantı noktasını kontrol etmek için yavaş olabilir, bu durumlarda "çoklu iş parçacığı" veya "çoklu işlem" kullanmak iyi bir fikirdir. Python içinde nmap kullanarak veya ham soketler kullanarak başka şekillerde de tarayabilirsiniz.

Kodu indirmek isterseniz, bir zip ekliyorum:

kod SynScan.zip 644 bayt 254 İndirilenler

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.
wave wave wave wave wave