Mikail.Net

Yazılımcı günlüğü

Yerel ağınızdaki tüm cihazlar

Bu Python programı, bir ağda belirtilen IP adreslerindeki bilgisayarların çevrimiçi durumunu ve MAC adresi ile üretici bilgisini kontrol eder. Program, ICMP ping kullanarak bilgisayarların durumunu kontrol eder, ardından IP adresinden MAC adresi ve üretici bilgisini almak için ‘ip neigh’ komutunu ve ‘macvendors.com’ API’sını kullanır. Programın açıklamaları ile birlikte tamamı aşağıda yer almaktadır:

import os
import subprocess
import platform
import time
import socket
import re
import requests

# Kontrol edilecek bilgisayarların IP adresleri veya etki alanı adları listesi
computers_list = [f"192.168.1.{i}" for i in range(1, 255)]

# İşletim sistemini kontrol etme
os_name = platform.system()


# Ping komutunu çalıştıran ve sonucu döndüren bir fonksiyon
def check_computer_status(computer):
    if os_name == "Windows":
        command = f"ping -n 1 -w 1 {computer}"
    elif os_name == "Linux":
        command = f"ping -c 1 -W 1 {computer}"
    else:
        print("Desteklenmeyen işletim sistemi!")
        return False

    result = subprocess.call(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, shell=True)
    return result == 0


# IP adresini etki alanı adına çeviren fonksiyon
def get_hostname(ip_address):
    try:
        hostname, _, _ = socket.gethostbyaddr(ip_address)
        return hostname
    except socket.herror:
        return None


# IP adresinden MAC adresini ve üretici bilgisini alan fonksiyon
def get_mac_and_vendor(ip_address):
    if os_name == "Linux":
        ip_neigh_command = f"ip neigh show {ip_address}"
    else:
        return None, None

    ip_neigh_output = subprocess.check_output(ip_neigh_command, shell=True).decode()
    mac_address = re.search(r"(([0-9a-fA-F]{2}[:-]){5}([0-9a-fA-F]{2}))", ip_neigh_output)
    if mac_address:
        mac_address = mac_address.group(0)
        vendor_url = f"https://api.macvendors.com/{mac_address}"
        try:
            vendor = requests.get(vendor_url).text
        except requests.exceptions.RequestException:
            vendor = "Bilinmiyor"
    else:
        mac_address = "Bilinmiyor"
        vendor = "Bilinmiyor"

    return mac_address, vendor


# Ana fonksiyon
def main():
    while True:
        for computer in computers_list:
            status = check_computer_status(computer)
            if status:
                hostname = get_hostname(computer)
                mac_address, vendor = get_mac_and_vendor(computer)
                if hostname:
                    print(f"{computer} ({hostname}) is ONLINE. MAC: {mac_address}, Vendor: {vendor}")
                else:
                    print(f"{computer} is ONLINE. MAC: {mac_address}, Vendor: {vendor}")

        time.sleep(600)  # 600 saniye bekle (10 dakika)


if __name__ == "__main__":
    main()