Otomatik Ağ Tarayıcı(tüm sistemler için)

  • Konuyu başlatan Konuyu başlatan nt
  • Başlama tarihi Başlama tarihi

nt

Emekli
Katılım
21 Nisan 2023
Mesajlar
1,231
Selam!

Geliştirdiğim otomatik ağ tarayıcıyı sizinle paylaşmak istiyorum. Bu araç, ağınızdaki cihazları tespit etmek için kullanışlıdır.

  • Kullanıcıdan IP aralığını sormadan otomatik olarak ağı tarar.
  • Bulunan cihazları IP ve MAC adresleriyle listeler.
  • Kullanıcı dostu bir menü arayüzüne sahiptir.
  • 1-2-3 diye seçim yapmanız yeterlidir.
  • linuxda sudo ile çalıştırmayı ve firewall kapatmayı unutmayın

Ekran Görüntüsü - 2023-12-24 13-26-08.png



Kod:
from scapy.all import ARP, Ether, srp
import platform
import os
import netifaces

class NetworkScanner:
    def __init__(self):
        self.devices = []

    def get_local_ip(self):
        try:
            ip = netifaces.ifaddresses(netifaces.gateways()['default'][netifaces.AF_INET][1])[netifaces.AF_INET][0]['addr']
            return ip
        except (OSError, KeyError):
            return None

    def discover_devices(self, ip_range):
        arp_request = ARP(pdst=ip_range)
        ether_frame = Ether(dst="ff:ff:ff:ff:ff:ff")
        packet = ether_frame / arp_request

        result = srp(packet, timeout=3, verbose=0)[0]

        self.devices = [{'ip': received.psrc, 'mac': received.hwsrc} for sent, received in result]

    def print_device_list(self):
        print("\nBulunan Cihazlar:")
        print("IP Adres\t\tMAC Adres")
        print("-----------------------------------------")
        for device in self.devices:
            print(f"{device['ip']}\t\t{device['mac']}")

    def clear_screen(self):
        os.system('cls' if platform.system() == 'Windows' else 'clear')

    def display_menu(self):
        print("\nMekatronik.org Ağ Tarayıcıya Hoş Geldiniz!")
        print("1. Cihazları Tara")
        print("2. Cihaz Listesini Göster")
        print("3. Programdan Çık")
  
    def get_user_choice(self):
        choice = input("Seçiminizi yapın (1-3): ")
        return choice

    def run(self):
        while True:
            self.clear_screen()
            self.display_menu()

            choice = self.get_user_choice()

            if choice == '1':
                local_ip = self.get_local_ip()
                if local_ip:
                    ip_range = local_ip.rsplit('.', 1)[0] + ".1/24"
                    self.discover_devices(ip_range)
                    input("Tarama tamamlandı. Devam etmek için Enter'a basın.")
                else:
                    print("Bağlı olduğunuz ağ adaptörünün IP adresi bulunamadı.")
                    input("Devam etmek için Enter'a basın.")
            elif choice == '2':
                self.clear_screen()
                self.print_device_list()
                input("Devam etmek için Enter'a basın.")
            elif choice == '3':
                print("Programdan çıkılıyor...")
                break
            else:
                print("Geçersiz seçenek. Tekrar deneyin.")
                input("Devam etmek için Enter'a basın.")

if __name__ == "__main__":
    scanner = NetworkScanner()
    scanner.run()
 
Son düzenleme:
Daha gelişmişi tüm sistemler için

Ekran Görüntüsü - 2023-12-28 04-21-44.png

Ekran Görüntüsü - 2023-12-28 04-21-49.png

3.png



Kod:
from scapy.all import ARP, Ether, srp
from tqdm import tqdm 
import platform
import os
import netifaces

class NetworkScanner:
    def __init__(self):
        self.devices = []

    def get_local_ip(self):
        try:
            ip = netifaces.ifaddresses(netifaces.gateways()['default'][netifaces.AF_INET][1])[netifaces.AF_INET][0]['addr']
            return ip
        except (OSError, KeyError):
            return None

    def discover_devices(self, ip_range):
        arp_request = ARP(pdst=ip_range)
        ether_frame = Ether(dst="ff:ff:ff:ff:ff:ff")
        packet = ether_frame / arp_request

        result, unanswered = srp(packet, timeout=3, verbose=0)
        for sent, received in tqdm(result, desc="Taranıyor", unit="Cihaz"):
            self.devices.append({'ip': received.psrc,
                                 'mac': received.hwsrc,
                                 'vendor': self.get_vendor(received.hwsrc),
                                 'hostname': self.get_hostname(received.psrc)})

    def get_vendor(self, mac_address):
        return ''  #ekle

    def get_hostname(self, ip_address):
        return ''  #ekle

    def print_device_list(self):
        print(f"\nBulunan Cihazlar:")
        print(f"IP Adres\t\tMAC Adres\t\tÜretici\t\tHostname")
        print(f"---------------------------------------------------------------")
        for device in self.devices:
            print(f"{device['ip']}\t\t{device['mac']}\t\t{device['vendor']}\t\t{device['hostname']}")

    def show_device_details(self):
        if not self.devices:
            print(f"Önce cihazları taramanız gerekiyor.")
            return

        ip_to_check = input(f"Bilgilerini görmek istediğiniz cihazın IP adresini girin: ")
        found_device = next((device for device in self.devices if device['ip'] == ip_to_check), None)

        if found_device:
            print(f"\nCihaz Bilgileri:")
            print(f"IP Adres: {found_device['ip']}")
            print(f"MAC Adres: {found_device['mac']}")
            print(f"Üretici: {found_device['vendor']}")
            print(f"Hostname: {found_device['hostname']}")
        else:
            print(f"{ip_to_check} IP adresine sahip bir cihaz bulunamadı.")

    def clear_screen(self):
        os.system('cls' if platform.system() == 'Windows' else 'clear')

    def display_menu(self):
        print("""
              
 _ __                         __,                           
( /  )   _/_              /  (                             
 /  / __ /  , , , __ _   /<   `.  _, __,  _ _   _ _   _  _ 
/  (_(_)(__(_(_/_(_)/ (_/ |_(___)(__(_/(_/ / /_/ / /_(/_/ (_ 
              
               """)
        print(f"@ixnur/NotworkScanner")
        print("---------------------------")
        print("1. Cihazları Tara")
        print("2. Cihaz Listesini Göster")
        print("3. Cihaz Bilgilerini Göster")
        print("---------------------------")
        print(f"Q. Programdan Çık")
        print("---------------------------")

    def get_user_choice(self):
        print(f"Ağdaki cihazlar için sırası ile '1' - 'enter' - '2' ")
        print("ip no ile detay için 3")
        choice = input("Seçiminizi yapın (1-3): ")
        return choice

    def run(self):
        while True:
            self.clear_screen()
            self.display_menu()

            choice = self.get_user_choice()

            if choice == '1':
                local_ip = self.get_local_ip()
                if local_ip:
                    ip_range = local_ip.rsplit('.', 1)[0] + ".1/24"
                    self.discover_devices(ip_range)
                    input("Tarama tamamlandı. Devam etmek için Enter'a basın.")
                else:
                    print("Bağlı olduğunuz ağ adaptörünün IP adresi bulunamadı.")
                    input("Devam etmek için Enter'a basın.")
            elif choice == '2':
                self.clear_screen()
                self.print_device_list()
                input("Devam etmek için Enter'a basın.")
            elif choice == '3':
                self.clear_screen()
                self.show_device_details()
                input("Devam etmek için Enter'a basın.")
            elif choice.lower() == 'q':
                print("Programdan çıkılıyor...")
                break
            else:
                print("Geçersiz seçenek. Tekrar deneyin.")
                input("Devam etmek için Enter'a basın.")

if __name__ == "__main__":
    scanner = NetworkScanner()
    scanner.run()


scapy ve tqdm kütüphanelerini kullanır. Yüklü değillerse önce yüklemeniz gerekebilir
requirements.txt
scapy==2.4.5
tqdm==4.62.0
netifaces==0.11.0

Programın doğru çalışması için root veya admin yetkilerine ihtiyaç duyabilir.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
8,904
Mesajlar
144,711
Üyeler
3,582
Son üye
Performans

Son kaynaklar

Back
Top