Erdem YILDIZ

Siber Güvenlik Araştırmacısı
Python Geliştiricisi
Linux Hayranı

Python ile Shodan API'leri kullanarak açık port tarama !!!

Merhaba arkadaşlar bugün python ile yazmış olduğum hedef cihazın portarını tarayıp daha sonra açık olan portları seçtiğiniz bir adrese mail atan script amacını , kodlarını ve video ile kullanımı göstereceğim. Haydi bir giriş yapalım...

Arkadaşlar bu scripteki amacım şuydu.Hedef bir server'ı genellikle hazır tool ile tarayıp açık olan portları görmek isteriz.Bu işlemi yaptığımızda hedef server log kayıtlarında bizim ip adresi bilgimizi sakladığını biliyoruz.Bunun önüne geçmek için Shodan API'leri kullaran bir script yazmak istedim.Burada tarama işlemini biz değil Shodan bizim için gerçekleştirecektir. Daha sonra ise açık portlar bilgisi bir script'te tutulup SendMail.py script'inde gördüğünz kısıma gerekeli eposta bilgileri vererek açık olan portlar bilgisini istediğiniz bir kişiye mail atarak işlemi sonlandıracaktır.

Kötü kod yazdığım için üzgünüm.Daha iyi bir yazılımcı olmak için yazılım geliştirme ve problem çözme yeteneğim üzerinde hala uğraşmaktayım.
                                        #SendMail.py
                                        #!/usr/bin/env python3
                                        # -*- coding: utf-8 -*-
                                        import smtplib

                                        def Mail(target,open_ports):
                                            server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
                                            server.ehlo()

                                            # Next, log in to the server
                                            server.login("Gmail", "Gmail-Şifre")

                                            # Send the mail

                                            Subject = "{} Adlı adresin açık portların listesi".format(target)
                                            Text = ""
                                            for i in open_ports:
                                                Text += "Open port {}\n".format(i)

                                            Message = "Subject: {}\n\n{}".format(Subject, Text)
                                            server.sendmail("Gmail", "Hedef kişi", Message)
                                            server.close()
                                        
                                        #ScanShodan.py
                                        #!/usr/bin/env python3
                                        import SendMail
                                        import shodan , json  ,requests , smtplib

                                        API_KEY = "Buraya Shodan API-KEY yazılacaktır"
                                        api = shodan.Shodan(API_KEY)

                                        class Network():
                                            def __init__(self):
                                                self.target = raw_input("Enter the address :")
                                                ask = "https://api.shodan.io/dns/resolve?hostnames=" + self.target + "&key=" + API_KEY
                                                response = requests.get(ask)
                                                get_json = json.loads(response.text)
                                                self.ip_addr = get_json[self.target]
                                                self.ScanPort()

                                            def ScanPort(self):
                                                host = api.host(self.ip_addr)
                                                self.open_ports = []
                                                for i in host["data"]:
                                                    self.open_ports.append(i["port"])
                                                self.Mail()
                                            def Mail(self):
                                                SendMail.Mail(self.target,self.open_ports)


                                        N = Network()
                                        

Yukarıda paylaşmış olduğum kodda bir sıkıntı yada yapılabilecek iyileştirmeler için bana ulaşabilirseniz çok sevinirim.Okuduğunuz için çok teşekkür ederim.Esen kalın :)