-
شنبه, ۱ خرداد ۱۴۰۰، ۰۷:۰۰ ب.ظ
-
۱۳۳۰
نوشتن اسکریپت بدست آوردن رمز WiFi های ذخیره شده در لینوکس با پایتون
درود به همه !
امروز با یک پست لینوکسی در خدمت شما هستیم . درد این پست یاد میگیریم چطور میشه اسکریپتی نوشت که به محض اجرا شدن پسوورد تمام WiFi های ذخیره شده روی سیستم لینوکسی رو به ما نشون بده . با ما همراه باشید
برای دیدن پسوورد های ذخیره شده باید از سرویس NetworkManager در لینوکس استفاده کنیم . در اصل این سرویس یک رابط از شبکه ی سیستم عامل در اختیار ما میزاره .
دستوری در لینوکس وجود داره به نام nmcli . با استفاده از این دستور میتونیم با NetworkManager کار کنیم و اطلاعات مربوط به شبکه ی سیستم عامل رو ازش بگیری .
دستور زیر لیست SSID (همون نام WiFi) های ذخیره شده در سیستم رو برمیگردونه :
MrPython@debian:~$ nmcli -g NAME connection show
پس از اجرای دستور بالا میبینیم که لیستی از ssid های موجود در سیستم رو نشون میده :
حالا password ذخیره شده از هرکدومشون رو خواستیم میتونیم با دستور زیر بدست بیاریم :
MrPython@debian:~$ nmcli -s -g 802-11-wireless-security.psk connection show
<NAME>به جای <NAME> اسم وای فای مورد نظر که میخوایم پسووردشو ببینیم رو وارد میکنیم سپس خروجی دستور ، پسوورد WiFi مورد نظره ( به شرطی که اون WiFi پسوورد داشته باشه )
تا اینجا میدونیم چه شکلی دستی اینکارو با خط فرمان انجام بدیم . حالا بیاین اسکریپت پایتونی بنویسیم که این کارو خودکار برای بدست آوردن پسوورد تمام WiFi های ذخیره شده انجام بده .
اسکریپت :
from subprocess import check_output
ssids = []
command = "nmcli -g NAME connection show" # For get the list of saved ssids command = command.split(" ") # splitting command by " "
result = check_output(command) # run command result = result.decode() # decode the output of command result = result.split("\n") # splitting the result line by line
for ssid in result: # append ssids to ssids list if ssid: ssids.append(ssid)
for ssid in ssids: # get password for each ssid command = "nmcli -s -g 802-11-wireless-security.psk connection show" command = command.split(" ") # splitting command by " " command.append(ssid) # append ssid to command list result = check_output(command) # run command and get its output result = result.decode().strip("\n") # decode and strip \n
print ("{} -> {}".format(ssid , result)) # print ssid -> password
همینجور که میبینید اسکریپت توسط کامنت ها به طور کامل توضیح داده شده . در ابتدا از کتابخونه ی subprocess ، تابع check_output رو ایمپورت کردیم . این تابع میاد یک دستور رو در خط فرمان اجرا میکنه و نتیجه یا خروجی دستور رو برمیگردونه . بعد از اون یه لیست به نام ssids تعریف کردیم که قراره لیستی از نام وای فای های ذخیره شده در سیستم داخلش ذخیره بشه . سپس در متغییر command دستوری که دربالا گفتیم رو نوشتیم (دستوری که لیست نام وای فای های ذخیره شده رو برمیگردونه ) و این دستور رو بر اساس فضای خالی space جداسازی و به لیست تبدیل کردیم (چون تابع check_output باید یک لیست در ورودی بگیره) و اونو به تابع check_output دادیم تا برامون اجرا کنه و نتیجشو بهمون بگه . نتیجشو ریختیم داخل متغییر result و اونو دیکود (از نوع داده بایت به استرینگ تبدیل کردن) کردیم . سپس اونو خط به خط جدا کردیم و با یه حلقه for هر کدوم از ssid ها رو اضافه کردیم به لیست ssids .
تا اینجا ما لیست تمام ssids ها رو داریم . حالا با استفاده از حلقه ی for اومدیم پسوورد تک تک ssid ها رو بدست آوردیم .
برای اینکار دستور بدست آوردن پسوورد از طریق nmcli که بالا گفتیم رو در متغییر command ذخیره کردیم . سپس اسم وای فای رو به آخرش اضافه کردیم و اونو با تابع check_output اجرا کردیم و نتیجش که پسوورد وای فای هست رو بدست آوردیم . این نتیجه رو دیکود کردیم و n\ آخرش رو حذف کردیم .
در نهایت اونو به کاربر نشون دادیم .
بعد از اجرای اسکریپت :
امیدوارم لذت برده باشید سوالی بود مطرح کنید .
یا حق!
Telegram Channel : @mrpythonblog