Merhaba arkadaşlar,
Bugün sizlere elimden geldiğince Python ile Wi-fi ağ taraması yapan ve ilerleyen yazılarda bunu ilerleterek kablosuz ağ keşfi yapmayı hedefleyen bir tool yazmayı düşünüyorum.
Lafı çok uzatmadan anlatıma başlayalım
Program, Windows'un netsh komutunu kullanarak ağ bilgilerini toplar ve kullanıcıya gösterir. Kodun her parçasını ele alarak ne işe yaradığını açıklayacağız.
ilk önce gerekli kütüphaneleri belirlemek için Python paket yöneticisi olan "pip" in bucket sayfasını ziyaret ediyoruz.
Modül açıklamaları
Main Program
Program, list_available_networks fonksiyonunu çağırır ve elde edilen ağları ekrana yazdırır.
Artık basic seviyede ağları listeleyen bir tool yazmış oldu ancak şuan sadece temel attık ilerleyen yazılarda kodu geliştirerek daha kompleks bir tool üretmeyi hedefliyoruz. Buraya kadar okuduğunuz için teşekkür ederim gelecek yazılarda görüşmek üzere iyi kodlamalar.
Not : başlangıç seviyesi olarak düşünerek en temelden başladım geliştirme fikirleri ve katkılar birlikte en iyi bulmamıza yardımcı olacaktır. Katkılarınız için teşekkür ederim.
Bugün sizlere elimden geldiğince Python ile Wi-fi ağ taraması yapan ve ilerleyen yazılarda bunu ilerleterek kablosuz ağ keşfi yapmayı hedefleyen bir tool yazmayı düşünüyorum.
Lafı çok uzatmadan anlatıma başlayalım
ilk önce gerekli kütüphaneleri belirlemek için Python paket yöneticisi olan "pip" in bucket sayfasını ziyaret ediyoruz.
- subprocess32 kütüpthanesi ile komut satırında ilgili işlemleri yapabiliyoruz. Link üzerinden daha detaylı okuma yapabilirsiniz.
1. Modüllerin İçe Aktarılması
Kodun başında, programın düzgün çalışabilmesi için gerekli olan modüller içe aktarılır.
Python:
import subprocess # subprocess modülünü içe aktarır, bu modül komut satırı işlemlerini çalıştırmak için kullanılır
import re # re modülünü içe aktarır, bu modül düzenli ifadelerle çalışmak için kullanılır
Modül açıklamaları
- subprocess modülü: Python'dan sistem komutlarını çalıştırmak için kullanılır. Bu modül, terminal veya komut satırı işlemlerini Python kodu içerisinden yürütmeye olanak tanır.
- re modülü: Düzenli ifadelerle çalışmayı sağlar. Metin içerisinden belirli desenlere uyan bilgileri bulmak veya ayıklamak için kullanılır.
2. Fonksiyon: list_available_networks
Bu fonksiyon, Windows'ta mevcut Wi-Fi ağlarını tarar ve her bir ağın bilgilerini elde eder. bu sayede console üzerinde temiz ve anlaşılabilir bir ağ listesi oluşturabiliriz.
Python:
def list_available_networks():
# 'netsh wlan show networks mode=Bssid' komutunu çalıştırır ve sonuçları yakalar
result = subprocess.check_output(['netsh', 'wlan', 'show', 'networks', 'mode=Bssid'], shell=True)
# Komutun çıktısını UTF-8 formatında decode eder ve satırlara böler
networks = result.decode('utf-8').split('\r\n')
network_list = [] # Bulunan ağları tutacak listeyi oluşturur
network_info = {} # Tek bir ağın bilgilerini tutacak geçici sözlüğü oluşturur
- subprocess.check_output: Belirtilen komutu çalıştırır ve çıktıyı döner. Burada netsh wlan show networks mode=Bssid komutu ile mevcut Wi-Fi ağları hakkında bilgi toplar.
- decode('utf-8'): Komutun çıktısını UTF-8 formatında çözümler.
- split('\r\n'): Çıktıyı satırlara böler.
3. Çıktının Analizi ve Ağ Bilgilerinin Toplanması
Fonksiyon, komut çıktısını satır satır analiz eder ve ağ bilgilerini toplar. Bu sayede yakalanan her ağı döngü sayesinde listelemiş olacağız.
Python:
for line in networks:
if "SSID" in line:
network_info['SSID'] = line.split(':')[1].strip()
elif "BSSID" in line:
match = re.search(r'BSSID\s*:\s*(\S+)', line)
if match:
network_info['BSSID'] = match.group(1)
elif "Signal" in line:
match = re.search(r'Signal\s*:\s*(\S+)', line)
if match:
network_info['Signal'] = match.group(1)
elif "Radio type" in line:
match = re.search(r'Radio type\s*:\s*(\S+)', line)
if match:
network_info['Radio type'] = match.group(1)
elif "Authentication" in line:
network_info['Authentication'] = line.split(':')[1].strip()
elif "Encryption" in line:
network_info['Encryption'] = line.split(':')[1].strip()
network_list.append(network_info)
network_info = {}
- "SSID" in line: Eğer satırda "SSID" varsa, ağın SSID'sini yakalar.
- re.search: Düzenli ifadeler kullanarak BSSID, sinyal gücü, radyo tipi gibi bilgileri yakalar.
- network_info: Her ağ için bilgiler bu sözlükte geçici olarak saklanır.
4. Sonuçların Dönmesi
Fonksiyon, topladığı ağ bilgilerini bir liste olarak döner.
Python:
return network_list # Bulunan ağların listesini döner
Main Program
Program, list_available_networks fonksiyonunu çağırır ve elde edilen ağları ekrana yazdırır.
Python:
networks = list_available_networks() # Fonksiyonu çağırır ve sonuçları networks değişkenine atar
# Bulunan Wi-Fi ağlarını ekrana yazdırır
print("Available Wi-Fi Networks:")
print("---------------------------------")
for i, network in enumerate(networks):
print(f"{i+1}. SSID: {network['SSID']}") # Ağın SSID'sini ekrana yazdırır
print(f" BSSID: {network.get('BSSID', 'N/A')}") # Ağın BSSID'sini ekrana yazdırır, yoksa 'N/A' yazdırır
print(f" Signal Strength: {network.get('Signal', 'N/A')} dBm") # Ağın sinyal gücünü ekrana yazdırır, yoksa 'N/A' yazdırır
print(f" Authentication: {network['Authentication']}") # Ağın doğrulama tipini ekrana yazdırır
print(f" Encryption: {network['Encryption']}") # Ağın şifreleme tipini ekrana yazdırır
print(f" Radio type: {network.get('Radio type', 'N/A')}") # Ağın radyo tipini ekrana yazdırır, yoksa 'N/A' yazdırır
print("---------------------------------") # Ayrım çizgisi ekrana yazdırır
- enumerate(networks): Bulunan ağları numaralandırarak ekrana yazdırır.
- get('BSSID', 'N/A'): Eğer belirli bir bilgi mevcut değilse "N/A" (Not Available) olarak gösterir.
Python:
import subprocess # subprocess modülünü içe aktarır, bu modül komut satırı işlemlerini çalıştırmak için kullanılır
import re # re modülünü içe aktarır, bu modül düzenli ifadelerle çalışmak için kullanılır
def list_available_networks():
# 'netsh wlan show networks mode=Bssid' komutunu çalıştırır ve sonuçları yakalar
result = subprocess.check_output(['netsh', 'wlan', 'show', 'networks', 'mode=Bssid'], shell=True)
# Komutun çıktısını UTF-8 formatında decode eder ve satırlara böler
networks = result.decode('utf-8').split('\r\n')
network_list = [] # Bulunan ağları tutacak listeyi oluşturur
network_info = {} # Tek bir ağın bilgilerini tutacak geçici sözlüğü oluşturur
# Komut çıktısının her bir satırını döner
for line in networks:
if "SSID" in line:
# Eğer satır "SSID" içeriyorsa, SSID'yi alır ve network_info sözlüğüne ekler
network_info['SSID'] = line.split(':')[1].strip()
elif "BSSID" in line:
# Eğer satır "BSSID" içeriyorsa, düzenli ifadeyle BSSID'yi yakalar ve network_info sözlüğüne ekler
match = re.search(r'BSSID\s*:\s*(\S+)', line)
if match:
network_info['BSSID'] = match.group(1)
elif "Signal" in line:
# Eğer satır "Signal" içeriyorsa, düzenli ifadeyle sinyal gücünü yakalar ve network_info sözlüğüne ekler
match = re.search(r'Signal\s*:\s*(\S+)', line)
if match:
network_info['Signal'] = match.group(1)
elif "Radio type" in line:
# Eğer satır "Radio type" içeriyorsa, düzenli ifadeyle radyo tipini yakalar ve network_info sözlüğüne ekler
match = re.search(r'Radio type\s*:\s*(\S+)', line)
if match:
network_info['Radio type'] = match.group(1)
elif "Authentication" in line:
# Eğer satır "Authentication" içeriyorsa, doğrulama tipini alır ve network_info sözlüğüne ekler
network_info['Authentication'] = line.split(':')[1].strip()
elif "Encryption" in line:
# Eğer satır "Encryption" içeriyorsa, şifreleme tipini alır ve network_info sözlüğüne ekler
network_info['Encryption'] = line.split(':')[1].strip()
# network_info sözlüğünü network_list listesine ekler ve network_info sözlüğünü sıfırlar
network_list.append(network_info)
network_info = {}
return network_list # Bulunan ağların listesini döner
# Ana program
networks = list_available_networks() # Fonksiyonu çağırır ve sonuçları networks değişkenine atar
# Bulunan Wi-Fi ağlarını ekrana yazdırır
print("Available Wi-Fi Networks:")
print("---------------------------------")
for i, network in enumerate(networks):
print(f"{i+1}. SSID: {network['SSID']}") # Ağın SSID'sini ekrana yazdırır
print(f" BSSID: {network.get('BSSID', 'N/A')}") # Ağın BSSID'sini ekrana yazdırır, yoksa 'N/A' yazdırır
print(f" Signal Strength: {network.get('Signal', 'N/A')} dBm") # Ağın sinyal gücünü ekrana yazdırır, yoksa 'N/A' yazdırır
print(f" Authentication: {network['Authentication']}") # Ağın doğrulama tipini ekrana yazdırır
print(f" Encryption: {network['Encryption']}") # Ağın şifreleme tipini ekrana yazdırır
print(f" Radio type: {network.get('Radio type', 'N/A')}") # Ağın radyo tipini ekrana yazdırır, yoksa 'N/A' yazdırır
print("---------------------------------") # Ayrım çizgisi ekrana yazdırır
Artık basic seviyede ağları listeleyen bir tool yazmış oldu ancak şuan sadece temel attık ilerleyen yazılarda kodu geliştirerek daha kompleks bir tool üretmeyi hedefliyoruz. Buraya kadar okuduğunuz için teşekkür ederim gelecek yazılarda görüşmek üzere iyi kodlamalar.
Not : başlangıç seviyesi olarak düşünerek en temelden başladım geliştirme fikirleri ve katkılar birlikte en iyi bulmamıza yardımcı olacaktır. Katkılarınız için teşekkür ederim.






