İçindekiler Tablosu
Giriş
Bu yazımda sizlere Python ile basit ama etkili bir port tarama aracı nasıl yazılır, ondan bahsedeceğim. Bilindiği üzere Python Siber Güvenlik alanında çokça tercih edilen bir dildir. Tool yazma konusunda da oldukça kapsamlı ve etkilidir.
Port Scanner Ne İşe Yarar?
Aracı yazmaya başlamadan önce, öncelikle port tarama aracının ne işe yaradığından biraz bahsedelim. Öncelikle, tarama terimini ele alacak olursak, bir şeyi baştan sona incelemek ve analiz etmek anlamına geldiğini söyleyebiliriz. Buna ek olarak, “port” kelimesinin Türkçeye “bağlantı noktası” olarak çevrildiğini belirtmek gerekir.
Bunun yanı sıra, port numarası ise bir bağlantı noktasını benzersiz bir şekilde tanımlamak için atanan sanal bir numaradır. Daha açık bir ifadeyle, ağ bağlantı noktalarını belirtmek için kullanılan numaralardır. Dahası, portlar ve numaraları, verilerin hangi hizmete yönlendirileceğini belirlemek için kullanılır. Bu nedenle, ağ sistemlerinde son derece önemli bir yere sahiptirler.

Port tarama aracı belirli bir hedefteki belirli veya var olan tüm portları tek tek inceler ve analiz eder. Yaptığı tarama sonucu portların durumunu bildirir. Portların açık mı kapalı mı olduğu hakkında bilgi verir. Hedefte açık olan portlara göre de bir sonraki hamlemizi belirlememize yardımcı olur.
Kodlar
1) from socket import *
İlk olarak Python’un socket kütüphanesindeki tüm fonksiyonları import ediyoruz. Socket kütüphanesi, ağ programlaması için kullanılır. Bu modül sayesinde TCP bağlantıları kurabilir, veri alıp gönderebiliriz.
2) def conScan(tgtHost, tgtPort):
3) try:
4) connskt = socket(AF_INET, SOCK_STREAM)
5) connskt.connect((tgtHost, tgtPort))
6) print('[+]%dtcp open'% tgtPort)
7) connskt.close()
8) except:
9) print('[-]%dtcp closed'% tgtPort)
Daha sonra bir fonksiyon yazıyoruz. Bu fonksiyon, belirli bir hedef IP’ye (tgtHost) ve porta (tgtPort) bağlantı kurmaya çalışır.
- 4. satırdaki kod IPv4 ve TCP kullanarak bir soket oluşturur.
- 5. satırdaki kod belirtilen hedef IP ve port ile bağlantı kurmaya çalışır.
- 6. satırdaki kod eğer bağlantı başarılı olursa, portun açık olduğunu yazdırır.
- 7. satır bağlantıyı kapatır.
- 8. satır bir sorun varsa yakalar.
- 9. satır da eğer bağlantı kurulamazsa, portun kapalı olduğunu belirten bir mesaj yazdırır.
10) def portScan(tgtHost, tgtPorts):
11) try:
12) tgtIP = gethostbyname(tgtHost)
13) except:
14) print('[-]Cannot resolve %s'% tgtHost)
15) return
16) try:
17) tgtName = gethostbyaddr(tgtIP)
18) print('\n[+]Scan result of: %s ' % tgtName[0])
19) except:
20) print('\n[+]Scan result of: %s ' % tgtIP)
21) setdefaulttimeout(1)
22) for tgtPort in tgtPorts:
23) print('scanning port: %d' % tgtPort)
24) conScan(tgtHost, int(tgtPort))
Sonra ikinci bir fonksiyon daha yazıyoruz. Bu fonksiyon, belirlenen host üzerindeki birden fazla portu tarar.
- 12. satırdaki kod hedef olarak verilen alan adını (hostname) bir IP adresine çevirir. Örneğin:
google.com
→142.250.74.14
gibi. Eğer çevrilemezse “Cannot Resolve” hatası verir. - 17. satır hedef IP’nin ters DNS çözümlemesini yapar ve host adını bulmaya çalışır. Eğer bulunamazsa direkt IP adresini yazdırır.
- 21. satır her bağlantı isteği için 1 saniye zaman aşımı süresi belirler. Eğer bağlantı 1 saniye içinde kurulamazsa, bağlantı başarısız sayılır.
- 22. satır ise listedeki tüm portları tek tek tarar. Her port için conScan() fonksiyonunu çağırır ve bağlantı durumunu kontrol eder.
25) if __name__ == '__main__':
26) portScan('google.com', [80, 22])
Son olarak if bloğu çalışır. Bu satır, Python programlarının doğrudan çalıştırıldığında mı yoksa başka bir dosyadan çağrıldığında mı çalıştığını kontrol eder. Eğer dosya doğrudan çalıştırılıyorsa, 26. satırdaki fonksiyon çağrılır. Google.com adresine bağlanmaya çalışır. 80. port (HTTP) ve 22. port (SSH) açık mı kapalı mı kontrol eder. Eğer dosya doğrudan çağrılmıyorsa 26. satır çalışmaz. Burada amaç modüler kod yazmak ve yazılan fonksiyonları başka projelerde de kullanabilmek.
Bu basit ama etkili aracı kullanarak sizler de kendi tarama işleminizi gerçekleştirebilirsiniz. Kodun bütün haline buradan direkt ulaşabilirsiniz:
https://github.com/karaozan09/Cyber_Tools/blob/master/portscan.py
Daha fazla içerik için diğer yazılarımıza göz atmayı unutmayın:
Leave a Comment